zoukankan      html  css  js  c++  java
  • hihoCoder1712

    #1712 : 字符串排序

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    一般我们在对字符串排序时,都会按照字典序排序。当字符串只包含小写字母时,相当于按字母表"abcdefghijklmnopqrstuvwxyz"的顺序排序。  

    现在我们打乱字母表的顺序,得到一个26个字母的新顺序。例如"bdceafghijklmnopqrstuvwxyz"代表'b'排在'd'前,'d'在'c'前,'c'在'e'前……  

    给定N个字符串,请你按照新的字母顺序对它们排序。  

    输入

    第一行包含一个整数N。(1 <= N <= 1000)

    第二行包含26个字母,代表新的顺序。

    以下N行每行一个字符串S。 (|S| <= 100)

    输出

    按新的顺序输出N个字符串,每个字符串一行。

    样例输入
    5
    bdceafghijklmnopqrstuvwxyz
    abcde
    adc
    cda
    cad
    ddc
    样例输出
    ddc
    cda
    cad
    abcde
    adc


    分析:用sort函数排序就行。
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    using namespace std;
    
    char s[100];
    int c[330];
    struct Node{
        char sub[103];
    }a[1200]; 
    
    int cmp(Node A,Node B)
    {
        int i=0;
        for(;A.sub[i]&&B.sub[i];i++)
        {
            if(c[A.sub[i]]>c[B.sub[i]]) return 1;
            else if(c[A.sub[i]]<c[B.sub[i]]) return 0;
        }
        if(A.sub[i]==0&&B.sub[i]!=0) return 0;
        else if(B.sub[i]==0&&A.sub[i]!=0) return 1;
        else return 0;
    }
    
    int main()
    {
        int N;
        scanf("%d",&N);
        scanf("%s",s);
        for(int i=0;i<26;i++)
        c[s[i]]=26-i;//数值越大,字典序越靠前 
        for(int i=0;i<N;i++) scanf("%s",a[i].sub);
        sort(a,a+N,cmp);
        for(int i=0;i<N;i++)
        printf("%s
    ",a[i].sub);
        return 0;
    }
    View Code






  • 相关阅读:
    PAT 1010. 一元多项式求导 (25)
    PAT 1009. 说反话 (20) JAVA
    PAT 1009. 说反话 (20)
    PAT 1007. 素数对猜想 (20)
    POJ 2752 Seek the Name, Seek the Fame KMP
    POJ 2406 Power Strings KMP
    ZOJ3811 Untrusted Patrol
    Codeforces Round #265 (Div. 2) 题解
    Topcoder SRM632 DIV2 解题报告
    Topcoder SRM631 DIV2 解题报告
  • 原文地址:https://www.cnblogs.com/ACRykl/p/8723952.html
Copyright © 2011-2022 走看看