hdu1287 破译密码
生活随笔
收集整理的這篇文章主要介紹了
hdu1287 破译密码
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題意:
Total Submission(s): 3227 Accepted Submission(s): 1452
Problem Description 有個(gè)叫“豬頭幫”的國家,采用一種簡單的文法加密,他們所用的語言里面只有大寫字母,沒有其他任何字符;現(xiàn)在還知道他們加密的方法是:只用一個(gè)大寫字母和原文進(jìn)行異或運(yùn)算生成密文。請(qǐng)你幫忙解開。
Input 有若干組,每組輸入有2行,第一行整數(shù)N表示有N個(gè)密文,接著一行有N個(gè)整數(shù)分別表示N個(gè)密文。
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
?思路:
? ? ? 首先明確一點(diǎn)就是,既然是密碼傳輸,估計(jì)是只能傳輸加密的東西,不能傳輸真實(shí)的東西,所以該題目的測試數(shù)據(jù)應(yīng)該給的是只有一種破譯方式的數(shù)據(jù),(這個(gè)是我自己猜的,不然沒辦法做,他也沒寫特判),對(duì)于異或 有這樣的規(guī)律 a^b^b = a;所以直接暴力枚舉他的加密異或字母,當(dāng)所有的都是大寫字母的時(shí)候就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; }
破譯密碼
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3227 Accepted Submission(s): 1452
Problem Description 有個(gè)叫“豬頭幫”的國家,采用一種簡單的文法加密,他們所用的語言里面只有大寫字母,沒有其他任何字符;現(xiàn)在還知道他們加密的方法是:只用一個(gè)大寫字母和原文進(jìn)行異或運(yùn)算生成密文。請(qǐng)你幫忙解開。
Input 有若干組,每組輸入有2行,第一行整數(shù)N表示有N個(gè)密文,接著一行有N個(gè)整數(shù)分別表示N個(gè)密文。
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
?思路:
? ? ? 首先明確一點(diǎn)就是,既然是密碼傳輸,估計(jì)是只能傳輸加密的東西,不能傳輸真實(shí)的東西,所以該題目的測試數(shù)據(jù)應(yīng)該給的是只有一種破譯方式的數(shù)據(jù),(這個(gè)是我自己猜的,不然沒辦法做,他也沒寫特判),對(duì)于異或 有這樣的規(guī)律 a^b^b = a;所以直接暴力枚舉他的加密異或字母,當(dāng)所有的都是大寫字母的時(shí)候就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; }
總結(jié)
以上是生活随笔為你收集整理的hdu1287 破译密码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu2413 二分+二分匹配
- 下一篇: hdu4585 STL水题