1. 程式人生 > >Codeforces Round #486 (Div. 3) B:Substrings Sort

Codeforces Round #486 (Div. 3) B:Substrings Sort

Note

In the second example you cannot reorder the strings because the string "abab" is not a substring of the string "abacaba".

這個題剛開始計劃使用AC自動機,剛開始排序,然後使用string.find相鄰之間進行比較,若第一個是第二個的子串,第二個又是第三個的子串,那麼第一個自然就是第三個的子串了。

#include<bits/stdc++.h>

using namespace std;

typedef pair<int,string>PII;

vector<PII>v;

int main()
{
    int n;
    string temp;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        cin>>temp;
        v.push_back(make_pair(temp.length(),temp));
    }
    sort(v.begin(),v.end());
    for(int i=0;i<n-1;i++){
        if(v[i+1].second.find(v[i].second)==string::npos){
            cout<<"NO";
            return 0;
        }
    }
    cout<<"YES"<<endl;
    for(int i=0;i<n;i++){
        cout<<v[i].second<<endl;
    }
    return 0;
}