• hdu1287 破译密码


    题意:

    破译密码

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 3227 Accepted Submission(s): 1452


    Problem Description
    有个叫“猪头帮”的国家,采用一种简单的文法加密,他们所用的语言里面只有大写字母,没有其他任何字符;现在还知道他们加密的方法是:只用一个大写字母和原文进行异或运算生成密文。请你帮忙解开。

    Input
    有若干组,每组输入有2行,第一行整数N表示有N个密文,接着一行有N个整数分别表示N个密文。

    Output
    输出仅有大写字母组成的原文。

    Sample Input
    30 17 6 9 8 3 0 1 6 7 4 5 10 11 8 9 14 15 12 13 18 19 16 17 22 23 20 21 26 27 24

    Sample Output
    SDKJABCDEFGHIJKLMNOPQRSTUVWXYZ



         思路:
          首先明确一点就是,既然是密码传输,估计是只能传输加密的东西,不能传输真实的东西,所以该题目的测试数据应该给的是只有一种破译方式的数据,(这个是我自己猜的,不然没办法做,他也没写特判),对于异或 有这样的规律 a^b^b = a;所以直接暴力枚举他的加密异或字母,当所有的都是大写字母的时候就ok了...没说n多大,我开的是10W

    #include<stdio.h>
    int num[100000];
    int ans[100000];
    
    int main ()
    {  
       int n ,i ,j;
       while(~scanf("%d" ,&n))
       {
          for(i = 1 ;i <= n ;i ++)
          {
             scanf("%d" ,&num[i]);
          }
          
          for(i = 1 ;i <= 26 ;i ++)
          {
             for(j = 1 ;j <= n ;j ++)
             {
                ans[j] = num[j] ^ i;
                if(ans[j]<=0 || ans[j] > 26)
                break;
             }
             if(j == n + 1) break;
          } 
          for(i = 1 ;i <= n ;i ++)
          printf("%c" ,ans[i] + 64);
          printf("
    ");
       }
       return 0;
    }
          
    



  • 相关阅读:
    C# Sleep延时方法
    浅谈模糊测试
    python time模块常用方法小结
    Markdown使用小结
    关于测试用例设计、评审及用例质量评估的思考
    关于评估软件产品质量的思考
    关于软件测试工程师进阶提升的思考
    关于软件测试中回归测试的思考
    测试技术的思考 ---- 读《微软的软件测试之道》有感系列
    vue-learning:22
  • 原文地址:https://www.cnblogs.com/csnd/p/12063209.html
Copyright © 2020-2023  润新知