一个测点没过,孩子哭出声
查看原帖
一个测点没过,孩子哭出声
1258807
zhangqige楼主2025/1/8 19:42

思路: 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;
}

2025/1/8 19:42
加载中...