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;
}

 

posted @ 2018-08-25 23:08  eason99  阅读(74)  评论(0编辑  收藏  举报