Codeforces (c) Copyright 2010-2018 Mike Mirzayanov
The only programming contests Web 2.0 platform
Server time: Jun/05/2018 13:34:00
UTC+8 (d3).
Desktop version, switch to
mobile version.
题意大致就是:输入一组字符串,如果前面一个字符串是后面的子字符串则输出“YES”,并把字符串按长度依次输出,否则输出“NO”。
这道题不怎么难,但要会string类的输入输出,并且sort对string的排序是按字典序排序,所以要用到vector来排序,这道题最后的输出总是有问题,然后看了题解又改了一下,最后的输出则codeblock上总是显示语法错误,但提交上去居然过了。。。。。。。
#include<bits/stdc++.h>
using namespace std;
bool cmp(string str1,string str2){
return str1.length()<str2.length();
}
int main(){
//string s[101];
int n;
while(~scanf("%d",&n)){
//string s[n];
vector<string> s(n);
//string str;
for(int i=0;i<n;i++){
cin>>s[i];
//s.push_back(str);
}
sort(s.begin(),s.end(),cmp);
bool flag=false;
//string ::size_type idx;
for(int i=0;i<n-1;i++){
//string ::size_type idx;
//idx=s[i+1].find(s[i]);
if(s[i+1].find(s[i])==string::npos){
flag=true;
break;
}
}
if(flag) cout<<"NO"<<endl;
else{
printf("YES\n");
for(auto it : s) cout<<it<<endl;
}
}
return 0;
}