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