题目来源:
https://www.luogu.com.cn/problem/B4069

题目背景

对应的选择、判断题:试题 - GESP 202412 C++ 四级 - 洛谷有题

题目描述

小杨有 n 个仅包含小写字母的字符串 s1​,s2​,…,sn​,小杨想将这些字符串按一定顺序排列后拼接到一起构成字符串 t。小杨希望最后构成的字符串 t 满足:

  • 假设 ti​ 为字符串 t 的第 i 个字符,对于所有的 j<i 均有 tj​≤ti​。两个字符的大小关系与其在字母表中的顺序一致,例如 e<g<p<s。

小杨想知道是否存在满足条件的字符串排列顺序。

输入格式

第一行包含一个正整数 T,代表测试数据组数。

对于每组测试数据,第一行包含一个正整数 n,含义如题面所示。

之后 n 行,每行包含一个字符串 si​。

输出格式

对于每组测试数据,如果存在满足条件的排列顺序,输出(一行一个)1,否则输出(一行一个) 0。

输入输出样例

输入 #1

3
3
aa
ac
de
2
aac
bc
1
gesp

输出 #1

1
0
0

说明/提示

样例解释

对于第一组测试数据,一种可行的排列顺序为 aa+ac+de,构成的字符串 t 为 aaacde,满足条件。

对于全部数据,保证有 1≤T,n≤100,每个字符串的长度不超过 10。

这是一道灵活的贪心排序题,我们运用贪心的思想,先将每个字符串按照字典序顺序自动排好序,在组合在一起,根据题目的判断条件判断就好了(还蛮简单(水))。

下面看代码

题目代码:

#include<bits/stdc++.h>
using namespace std;
string a[101];
int main(){
	int t;
	cin>>t;
	while(t--){
		int n;
		cin>>n;
		for(int i=1;i<=n;i++){
			cin>>a[i];
		}
		sort(a+1,a+1+n);
		
		string ss="";
		for(int i=1;i<=n;i++) ss+=a[i];
		bool p=0;
		for(int i=0;i<ss.size()-1;i++){
			if(ss[i]>ss[i+1]) {
				cout<<0<<endl;
				p=1;
				break;
				
			}
		}
		if(p==0) cout<<1<<endl;
	} 
return 0;
}

点赞破十五更排序第三期(不点也更)。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐