这题正着来做很麻烦
#include <bits/stdc++.h>
using namespace std;
const int maxn=5e5+10;
string s[maxn];
int n;
void run(int q,int w)
{
//保证s[q]>=s[w]
//因为s[q]应该比较大,所以是去删掉s[w]的一些后缀
if(s[q]>=s[w]) return;//字典序大于等于,满足条件了
int len1=s[w].length(),len2=s[q].length();
for(int i=0;i<len1;i++)
if(s[w][i]>s[q][i])
{
s[w].erase(i,len1-i);
return;
}
}
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin >> n;
for(int i=1;i<=n;i++) cin >> s[i];
for(int i=n;i>=2;i--) run(i,i-1);
for(int i=1;i<=n;i++) cout<<s[i]<<"\n";
}