CF - 777D. Cloud of Hashtags 暴力
题目要求从第一个字符串到最后一个字符串的字典序由小到大,然后要求删除最少的字符,问删除后的字符串.
从上面的字符串往下面的字符串修改很麻烦,因为一个字符串受它下面的字符串影响修改了的话,那这个字符串上面的字符串也会受到影响。可以换个角度,可以视为最后一个字符串到第一个字符串的字典序由大到小排序,从下面的字符串往上扫,遇到一个字符串比它下面的字符串大就修改。
#include<bits/stdc++.h>
using namespace std;
string str[500000+10];
int main()
{
int n,ans=0,flag;
cin>>n;
for(int i=1;i<=n;i++)
cin>>str[i];
for(int i=n;i>=2;i--)
{
flag=1;
for(int j=1;j<str[i].size()&&j<str[i-1].size();j++)
{
if(str[i][j]<str[i-1][j])
{
flag=0;
str[i-1].erase(j,str[i-1].size()-j);
break;
}
if(str[i][j]>str[i-1][j])
{
flag=0;
break;
}
}
if(flag)
{
if(str[i].size()<str[i-1].size())
{
str[i-1].erase(str[i].size(),str[i-1].size()-str[i].size());
}
}
}
for(int i=1;i<=n;i++)
cout<<str[i]<<endl;
return 0;
}