zoukankan      html  css  js  c++  java
  • [Thu Summer Camp 2015]解密运算

    4104: [Thu Summer Camp 2015]解密运算

    Time Limit: 10 Sec  Memory Limit: 512 MB

    Description

     对于一个长度为N的字符串,我们在字符串的末尾添加一个特殊的字符"."。之后将字符串视为一个环,从位置1,2,3,...,N+1为起点读出N+1个字符,就能得到N+1个字符串。

     
    比如对于字符串“ABCAAA”,我们可以得到这N+1个串:
     
    ABCAAA.
     
    BCAAA.A
     
    CAAA.AB
     
    AAA.ABC
     
    AA.ABCA
     
    A.ABCAA
     
    .ABCAAA
     
    接着我们对得到的这N+1个串按字典序从小到大进行排序(注意特殊字符“.”的字典序小于任何其他的字符)结果如下:
     
    .ABCAAA
     
    A.ABCAA
     
    AA.ABCA
     
    AAA.ABC
     
    ABCAAA.
     
    BCAAA.A
     
    CAAA.AB
     
    最后,将排序好的N+1个串的最后一个字符取出,按照顺序排成一个新的字符串,也就是上面这个表的最后一列,就是加密后的密文“AAAC.AB”。
     
    请通过加密后的密文求出加密前的字符串。
     

    Input

    第一行有两个整数N,M,分别表示加密前的字符串长度和字符集大小,其中字符用整数1,2,3,...,M编号,添加的特殊字符“."用0编号。
     
    第二行为N+1个整数,表示加密后的字符串。
     

    Output

    输出仅一行,包含N个整数,用空格隔开,依次表示加密前字符串中每个字符的编号。

     

    Sample Input

    6 3
    1 1 1 3 0 1 2

    Sample Output

    1 2 3 1 1 1

    HINT

     #i (i=1~4)    N=5*(i+1) M<=3

    #5~6    N,M<=50 字符串中字符互不相同
    #7~8    N,M<=1000 字符串中字符互不相同
    #9~12    N,M<=1000
    #13~#20    N,M<=200000
    对密文以字母为第一关键字,位置为第二关键字,排序
    #include<cstdio>
    #include<algorithm>
    #define N 200011
    using namespace std;
    struct node
    {
        int ch;
        int id;
    }e[N];
    int n,m;
    bool cmp(node p,node q)
    {
        if(p.ch!=q.ch) return p.ch<q.ch;
        return p.id<q.id;
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n+1;i++) scanf("%d",&e[i].ch),e[i].id=i;
        sort(e+1,e+n+2,cmp);
        int now=e[1].id;
        while(now!=1)
        {
            printf("%d ",e[now].ch);
            now=e[now].id;
        }
    }
     
  • 相关阅读:
    十五、docker的隔离namespace和资源限制cgroup
    十四、docker-compose
    十三、搭建SSL的私有harbor仓库
    帆软常用JS
    oracle_ cursor.executemany
    sql常用语句
    考勤清洗
    JAVA基础教程day03--运算符
    B站视频爬虫
    ES6
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/6786211.html
Copyright © 2011-2022 走看看