zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 9 C. The Smallest String Concatenation(字符串排序)

    You're given a list of n strings a1, a2, ..., an. You'd like to concatenate them together in some order such that the resulting string would be lexicographically smallest.

    Given the list of strings, output the lexicographically smallest concatenation.

    Input

    The first line contains integer n — the number of strings (1 ≤ n ≤ 5·104).

    Each of the next n lines contains one string ai (1 ≤ |ai| ≤ 50) consisting of only lowercase English letters. The sum of string lengths will not exceed 5·104.

    Output

    Print the only string a — the lexicographically smallest string concatenation.

    Examples
    input
    4
    abba
    abacaba
    bcd
    er
    
    output
    abacabaabbabcder
    
    input
    5
    x
    xx
    xxa
    xxaa
    xxaaa
    
    output
    xxaaaxxaaxxaxxx
    
    input
    3
    c
    cb
    cba
    
    output
    cbacbc
    题意:给你n个字符串,串的长度可能不同,让你把这些串连起来使得最后的字典序最小。

    思路:一开始的想法是把字符串补齐,然后排个序,但是wa了。看了q神的解法,发现就是在排序的时候用字符串a+b<b+a进行排序,太亮了这方法。

    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    #include<vector>
    #include<map>
    #include<set>
    #include<queue>
    #include<stack>
    #include<string>
    #include<algorithm>
    #define inf 99999999
    #define pi acos(-1.0)
    #define maxn 50050
    #define MOD 1000000007
    using namespace std;
    typedef long long ll;
    typedef long double ldb;
    
    struct node{
        char s[60];
    }a[maxn];
    bool cmp(node a,node b){
        char s1[120],s2[120];
        char s3[120],s4[120];
        strcpy(s1,a.s);
        strcpy(s2,b.s);
        strcpy(s3,b.s);
        strcpy(s4,a.s);
        strcat(s1,s2);
        strcat(s3,s4);
        return strcmp(s1,s3)<0;
    
    }
    int main()
    {
        int n,m,i,j;
        while(scanf("%d",&n)!=EOF)
        {
            for(i=1;i<=n;i++){
                scanf("%s",a[i].s);
            }
            sort(a+1,a+1+n,cmp);
            for(i=1;i<=n;i++){
                cout<<a[i].s;
            }
            cout<<endl;
        }
        return 0;
    }
    


  • 相关阅读:
    前言
    实用逆袭课【时间管理、记忆训练、工作效率、人际社交】
    读书确实是一辈子的事
    求职宝典(笔记不详细,但你自己看完消化了真的受用)
    重新认识【时间、金钱、自我、人际关系】
    即兴演讲不是即兴
    大数据和AI的未来畅想
    女性30的思考1
    第四课 人际关系
    第三课 干好工作
  • 原文地址:https://www.cnblogs.com/herumw/p/9464537.html
Copyright © 2011-2022 走看看