Codeforces Round #486 (Div. 3) B Substrings Sort

  1. B子串排序
    给你n个字符串,每个字符串都是有小写字母组成的。重新给这些字符串
    排序按照以下规则:每个字符串的前面都是它的子串
    如果在b中选择连续的字母可以组成a,则称a是b的子串。比如字符串“for”
    是“codeforces”的子串,“for”是“therefore”的子串,但是没有子串“four”“fofo”和“rof”。
    输入:
    第一行是一个整数n(字符串的数量)
    下面的n行是给你的字符串。字符串的长度为1到100。每个字符串
    由小写字母组成。
    一些字符串可能是相同的。
    输出:
    如果重新排序后可以不可能满足要求的序列就输出“NO”(没有引号)。
    否则输出“YES”和n行要求的字符串的序列。
    提示:在第二个样例中,你不可以重新排序“abab”使它为“abacaba”的子串。
  2. 题目链接:http://codeforces.com/contest/988/problem/B
  3. 通过的代码:
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
string str[120];
bool cmp(string a,string b){
    int len1=a.length(),len2=b.length();
    return len1==len2?a<b:len1<len2;
}
int main(){
    int n;cin>>n;
    for(int i=1;i<=n;i++)cin>>str[i];
    sort(str+1,str+1+n,cmp);
    int flag=0;
    for(int i=2;i<=n;i++)if(str[i].find(str[i-1])==-1){
        flag=1;break;
    }
    if(flag)puts("NO");
    else {
        puts("YES");
        for(int i=1;i<=n;i++)cout<<str[i]<<endl;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值