题目链接:http://codeforces.com/contest/777/problem/D

题解:

题意:给出n行字符串,对其进行字典序剪辑。我自己的想法是正向剪辑的,即先对第一第二个字符串进行剪辑,但是这样却不能保证前面的操作是正确的,当后面突然出现一个字典序很小的字符串,那么前面的操作将非法。这种方法错在不能预知正在操作的字符串的字典序限度。看了别人的代码,发现是反向进行剪辑的,即从倒数第一第二个字符串进行剪辑,直到第一个。因为倒数第一个的字典序必须是最大,所以倒数第二个的字典序限度已知,所以可直接对其操作,并能保证操作时合法的,即在字典序限度之内,以此类推,直到第一个字符串。其实这是一个贪心过程,每一步都是最优的。

学习之处:

1.由于字符串的长度不确定,即无法预知其大小,所以用传统的数组行不通。后来想到用string(之前只是有过了解,但没有用过),即解决了字符串长度的问题。string只能用cin和cout输入输出,string初始长度为0,如果要直接赋值,只能对长度之内的元素赋值。可直接+ 和 =。 输出时遇到\0不会停止输出,而是输出所有的元素。

代码如下:

[cpp] view plaincopy
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. string a[500005],tmp;
  4. int main()
  5. {
  6. int n;
  7. scanf("%d",&n);
  8. for(int i = 0; i<n; i++)
  9. cin>>a[i];
  10. for(int i = n-2; i>=0; i--)
  11. {
  12. int len = a[i].size();
  13. tmp = "";
  14. for(int j = 0; j<len; j++)
  15. {
  16. if(a[i][j]>a[i+1][j])
  17. {
  18. a[i] = tmp;
  19. break;
  20. }
  21. else if(a[i][j]<a[i+1][j])
  22. {
  23. for(int k = j; k<len; k++) tmp += a[i][k];
  24. a[i] = tmp;
  25. break;
  26. }
  27. else if(a[i][j]==a[i+1][j]) tmp += a[i][j];
  28. }
  29. }
  30. for(int i = 0; i<n; i++)
  31. cout<<a[i]<<endl;
  32. }

Codeforces Round #401 (Div. 2) D Cloud of Hashtags —— 串相关推荐

  1. Codeforces Round #401 (Div. 2) D. Cloud of Hashtags

    题目链接:D. Cloud of Hashtags 题意: 给你n个字符串,让你删后缀,使得这些字符串按字典序排列,要求是删除的后缀最少 题解: 由于n比较大,我们可以将全部的字符串存在一个数组里面, ...

  2. Codeforces Round #401 (Div. 2) D. Cloud of Hashtags(字符串 + 逆向思维)

    D. Cloud of Hashtags 题意: 给你n个字符串,不能改变顺序,每个字符串可以选择从结尾删除连续的一段,使这n个字符串满足字典序从小到大的顺序.要求:删除的字符串尽量少. 题解: 最重 ...

  3. Codeforces Round #401 (Div. 2) D. Cloud of Hashtags(暴力)

    D. Cloud of Hashtags time limit per test2 seconds memory limit per test256 megabytes inputstandard i ...

  4. Codeforces Round #401 (Div. 2) C Alyona and Spreadsheet —— 打表

    题目链接:http://codeforces.com/contest/777/problem/C C. Alyona and Spreadsheet time limit per test 1 sec ...

  5. Codeforces Round #401 (Div. 2) E. Hanoi Factory 栈

    E. Hanoi Factory 链接: http://codeforces.com/contest/777/problem/E 题解: 排序b从小到大,在b相同排序a从小到大,使其满足如果i-1不能 ...

  6. Codeforces Round #401 (Div. 1) C(set+树状数组)

    题意: 给出一个序列,给出一个k,要求给出一个划分方案,使得连续区间内不同的数不超过k个,问划分的最少区间个数,输出时将k=1~n的答案都输出 比赛的时候想的有点偏,然后写了个nlog^2n的做法,T ...

  7. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  8. Codeforces Round #563 (Div. 2)/CF1174

    Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...

  9. 构造 Codeforces Round #302 (Div. 2) B Sea and Islands

    题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...

最新文章

  1. 一个介绍SAP git-enabled CTS的视频
  2. MongoDB存储基础教程
  3. js面向对象插件的做法框架new goBuy('.cakeItem',{ add:'.add', reduce:'.reduce' },[1,0.7,0.6]);...
  4. 非官方构建的 Windows 下的 Atom 编辑器
  5. Python安装第三方库临时使用国内源
  6. linux rpm yum 安装 软件
  7. DPDK QOS2 -- DPDK的QOS框架
  8. 虚幻引擎缓存路径修改
  9. 简要分析上海链家9月二手房
  10. android viewpage 代码添加view,百行代码实现Android ViewPage指示器
  11. Python爬取图片
  12. 人工智能(7)---一文读懂人脸识别技术:商业应用、产品落地、核心技术、市场规模
  13. ubuntu 20.04 安装腾讯官方微信
  14. Day527528529.图灵学院之面试题③ -面经
  15. 【MySQL数据库】笔试题总结
  16. 内网DNS报错:** server can‘t find ns1.aaa.com: SERVFAIL
  17. 【SpringMVC】拦截器和过滤器
  18. uma是什么意思_UMA是什么意思?
  19. 8-CSS布局之浮动布局
  20. 向工程腐化开炮 | 治理思路全解

热门文章

  1. 学习Three.js——后期处理(EffectComposer)
  2. 常用Js JavaScrript Tjquery Class
  3. Hessian矩阵以及在图像中的应用
  4. SQLiteManager 序列号 破解
  5. 【计量经济学】异方差性
  6. 关于“语义通信”的名词解释
  7. MySQL 解压版下载安装
  8. etlgr是什么服务器_什么是ETL,ETL工程师的的主要工作职责是什么?
  9. 机器学习:《统计学习方法》笔记(一)—— 隐马尔可夫模型
  10. np.log1p()取对数符合正态分布