hdu1287 破译密码

来源:互联网 发布:康佳电视机软件下载 编辑:程序博客网 时间:2024/06/15 08:00
题意:

破译密码

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
3017 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("\n");   }   return 0;}      



0 0
原创粉丝点击