zoukankan      html  css  js  c++  java
  • LA3213加密

    题意:
          白书上有些题的题意说的太蛋疼了,这个题的意思是说有两种加密方式,一种是交换位置,另一种是一一映射,交换位置是指如ABCD 可以加密成DCBA 也可以加密成ACBD就是把某些字母的位置改变了,至于是谁和谁交换随意,而一一映射是指ADD 可以加密成 BCC但不可以加密成ABC,然后现在有一种新的加密方式就是前面两个的合成版,现在问题来了,给你两个字母串(只有大写字母)问其中一个是不是由另一个经过新的加密方式(就是那两个方式合成在一起)加密过来的。


    思路:
          我们想一下,对于第一种加密方式,既然是可以随意改变位置,对于给定的两个串我们就不用考虑他们的顺序了,直接统计每个字母的出现个数,得到一个出现个数的序列,然后对于第二种加密,说是可以映射,但是映射谁我所谓只要不冲突就行,那么我们就不用管具体是那个字母出现了多少次,我们只要出现次数,然后我们把两个出现次数序列sort一遍,然后一一对应比较就行了,具体细节看代码。


    #include<stdio.h>
    #include<string.h>
    #include<algorithm>


    using namespace std;


    int mk1[30] ,mk2[30];
    char st1[110] ,st2[110];


    int main ()
    {
       int i ,l ,Ans;
       while(~scanf("%s" ,st1))
       {
           scanf("%s" ,st2);
           l = strlen(st1) - 1;
           memset(mk1 ,0 ,sizeof(mk1));
           memset(mk2 ,0 ,sizeof(mk2));
           for(i = 0 ;i <= l ;i ++)
           {
               mk1[st1[i] - 'A'] --;
               mk2[st2[i] - 'A'] --;
           }
           sort(mk1 ,mk1 + 26);
           sort(mk2 ,mk2 + 26);
           for(Ans = 0 ,i = 0 ;i <= 25 && !Ans;i ++)
           if(mk1[i] != mk2[i]) Ans = 1;      
           !Ans ? puts("YES") : puts("NO");
       }
       return 0;
    }
           





  • 相关阅读:
    Java 对文件的操作
    快速排序算法
    Java 时间和字符换的处理
    Redis 数据结构之Keys
    [转] Redis系统性介绍
    【转】JAVA 接口
    [转] Python 代码性能优化技巧
    几道关于面试的题目
    随手笔记2
    随手笔记
  • 原文地址:https://www.cnblogs.com/csnd/p/12062670.html
Copyright © 2011-2022 走看看