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

题意:给出n行以#开头的字符串,从原字符串尾部删除尽量少的字符串,使其为非降序排列。

思路:我们可以从最后一个字符串着手,对其前面的字符串进行删除操作,使其不大于前者。遍历到第一个字符串时就得到了我们所需要的字符串啦。

代码:

 #include <bits/stdc++.h>
using namespace std; const int MAXN=5e5+;
string gg[MAXN];
char cc[MAXN]; int main(void){
// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int n;
cin >> n;
for(int i=; i<n; i++){
scanf("%s", cc);
gg[i]=cc;
}
for(int i=n-; i>=; i--){
for(int j=; gg[i][j]; j++){
if(gg[i][j]>gg[i+][j]){
gg[i][j]='\0';
}else if(gg[i][j]<gg[i+][j]){
break;
}
}
}
for(int i=; i<n; i++){
// cout << gg[i].c_str() << endl;
printf("%s\n", gg[i].c_str()); //c_str():生成一个const char*指针,指向以空字符终止的数组。
}
return ;
}

咋一看好像会超时,不过本题中并没有给出那种很极端的数据

05-23 04:38