思路: 1.在一轮循环输入的时候,判断单个字符串是否是升序的,在全部单个字符串输入后,如果有逆序的直接输出0并且continue; 2.在议论中若输入的字符串都是升序,在进行贪心,按照每个字符串末尾字符从小到大排序; 3.排序之后,判断下一个字符串的第一个字符是否是在上一个字符串的后面,如果不是,输出0,否则输出1;
源代码:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int T,n;
bool flag;
string s[101];
bool cmp(string a,string b) {
int la=a.length();
int lb=b.length();
return a[la-1]<b[lb-1];
}
bool Is(string ch) {
int lc=ch.length();
for(int i=1; i<lc; i++) {
if(ch[i]<ch[i-1]) {
return 0;
}
}
return 1;
}
int main() {
cin>>T;
for(int i=1; i<=T; i++) {
cin>>n;
flag=0;
for(int j=1; j<=n; j++) {
cin>>s[j];
if(!Is(s[j])) {
flag=1;
}
}
if(flag){
cout<<0<<endl;
continue;
}
sort(s+1,s+1+n,cmp);
for(int k=2; k<=n; k++) {
int temp=s[k-1].length();
if(s[k][0]<s[k-1][temp-1]) {
flag=1;
break;
}
}
if(flag) cout<<0<<endl;
else cout<<1<<endl;
}
return 0;
}