天天看點

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