B4069 [GESP202412 四级] 字符排序
·
题目来源:
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;
}
点赞破十五更排序第三期(不点也更)。
更多推荐

所有评论(0)