Codeforces Round #401 (Div. 2) D Cloud of Hashtags —— 串
题目链接:http://codeforces.com/contest/777/problem/D
题解:
题意:给出n行字符串,对其进行字典序剪辑。我自己的想法是正向剪辑的,即先对第一第二个字符串进行剪辑,但是这样却不能保证前面的操作是正确的,当后面突然出现一个字典序很小的字符串,那么前面的操作将非法。这种方法错在不能预知正在操作的字符串的字典序限度。看了别人的代码,发现是反向进行剪辑的,即从倒数第一第二个字符串进行剪辑,直到第一个。因为倒数第一个的字典序必须是最大,所以倒数第二个的字典序限度已知,所以可直接对其操作,并能保证操作时合法的,即在字典序限度之内,以此类推,直到第一个字符串。其实这是一个贪心过程,每一步都是最优的。
学习之处:
1.由于字符串的长度不确定,即无法预知其大小,所以用传统的数组行不通。后来想到用string(之前只是有过了解,但没有用过),即解决了字符串长度的问题。string只能用cin和cout输入输出,string初始长度为0,如果要直接赋值,只能对长度之内的元素赋值。可直接+ 和 =。 输出时遇到\0不会停止输出,而是输出所有的元素。
代码如下:
- #include<bits/stdc++.h>
- using namespace std;
- string a[500005],tmp;
- int main()
- {
- int n;
- scanf("%d",&n);
- for(int i = 0; i<n; i++)
- cin>>a[i];
- for(int i = n-2; i>=0; i--)
- {
- int len = a[i].size();
- tmp = "";
- for(int j = 0; j<len; j++)
- {
- if(a[i][j]>a[i+1][j])
- {
- a[i] = tmp;
- break;
- }
- else if(a[i][j]<a[i+1][j])
- {
- for(int k = j; k<len; k++) tmp += a[i][k];
- a[i] = tmp;
- break;
- }
- else if(a[i][j]==a[i+1][j]) tmp += a[i][j];
- }
- }
- for(int i = 0; i<n; i++)
- cout<<a[i]<<endl;
- }
Codeforces Round #401 (Div. 2) D Cloud of Hashtags —— 串相关推荐
- Codeforces Round #401 (Div. 2) D. Cloud of Hashtags
题目链接:D. Cloud of Hashtags 题意: 给你n个字符串,让你删后缀,使得这些字符串按字典序排列,要求是删除的后缀最少 题解: 由于n比较大,我们可以将全部的字符串存在一个数组里面, ...
- Codeforces Round #401 (Div. 2) D. Cloud of Hashtags(字符串 + 逆向思维)
D. Cloud of Hashtags 题意: 给你n个字符串,不能改变顺序,每个字符串可以选择从结尾删除连续的一段,使这n个字符串满足字典序从小到大的顺序.要求:删除的字符串尽量少. 题解: 最重 ...
- 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 ...
- 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 ...
- Codeforces Round #401 (Div. 2) E. Hanoi Factory 栈
E. Hanoi Factory 链接: http://codeforces.com/contest/777/problem/E 题解: 排序b从小到大,在b相同排序a从小到大,使其满足如果i-1不能 ...
- Codeforces Round #401 (Div. 1) C(set+树状数组)
题意: 给出一个序列,给出一个k,要求给出一个划分方案,使得连续区间内不同的数不超过k个,问划分的最少区间个数,输出时将k=1~n的答案都输出 比赛的时候想的有点偏,然后写了个nlog^2n的做法,T ...
- Codeforces Round #506 (Div. 3)
Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...
- 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 ...
- 构造 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 的例子可以 ...
最新文章
- 一个介绍SAP git-enabled CTS的视频
- MongoDB存储基础教程
- js面向对象插件的做法框架new goBuy('.cakeItem',{ add:'.add', reduce:'.reduce' },[1,0.7,0.6]);...
- 非官方构建的 Windows 下的 Atom 编辑器
- Python安装第三方库临时使用国内源
- linux rpm yum 安装 软件
- DPDK QOS2 -- DPDK的QOS框架
- 虚幻引擎缓存路径修改
- 简要分析上海链家9月二手房
- android viewpage 代码添加view,百行代码实现Android ViewPage指示器
- Python爬取图片
- 人工智能(7)---一文读懂人脸识别技术:商业应用、产品落地、核心技术、市场规模
- ubuntu 20.04 安装腾讯官方微信
- Day527528529.图灵学院之面试题③ -面经
- 【MySQL数据库】笔试题总结
- 内网DNS报错:** server can‘t find ns1.aaa.com: SERVFAIL
- 【SpringMVC】拦截器和过滤器
- uma是什么意思_UMA是什么意思?
- 8-CSS布局之浮动布局
- 向工程腐化开炮 | 治理思路全解