洛谷 P1071 潛伏者

2021-07-23 23:56:02 字數 1375 閱讀 6150

題目描述

r 國和 s 國正陷入戰火之中,雙方都互派間諜,潛入對方內部,伺機行動。歷盡艱險後,潛伏於 s 國的 r 國間諜小 c 終於摸清了 s **用密碼的編碼規則:

1. s **方內部欲傳送的原資訊經過加密後在網路上傳送,原資訊的內容與加密後所得的內容均由大寫字母『a』-『z』構成(無空格等其他字元)。

2. s 國對於每個字母規定了對應的「密字」。加密的過程就是將原資訊中的所有字母替換為其對應的「密字」。

3. 每個字母只對應乙個唯一的「密字」,不同的字母對應不同的「密字」。「密字」可以和原字母相同。

例如,若規定『a』的密字為『a』,『b』的密字為『c』(其他字母及密字略),則原資訊「aba」被加密為「aca」。

現在,小 c 通過內線掌握了 s 國網路上傳送的一條加密資訊及其對應的原資訊。小 c希望能通過這條資訊,破譯 s 國的軍用密碼。小 c 的破譯過程是這樣的:掃瞄原資訊,對於原資訊中的字母 x(代表任一大寫字母),找到其在加密資訊中的對應大寫字母 y,並認為在密碼裡 y 是 x 的密字。如此進行下去直到停止於如下的某個狀態:

1. 所有資訊掃瞄完畢,『a』-『z』 所有 26 個字母在原資訊中均出現過並獲得了相應的「密字」。

2. 所有資訊掃瞄完畢,但發現存在某個(或某些)字母在原資訊中沒有出現。

3. 掃瞄中發現掌握的資訊裡有明顯的自相矛盾或錯誤(違反 s 國密碼的編碼規則)。例如某條資訊「xyz」被翻譯為「aba」就違反了「不同字母對應不同密字」的規則。

在小 c 忙得頭昏腦漲之際,r 國司令部又發來電報,要求他翻譯另外一條從 s 國剛剛擷取到的加密資訊。現在請你幫助小 c:通過內線掌握的資訊,嘗試破譯密碼。然後利用破譯的密碼,翻譯電報中的加密資訊。

【題目分析】

模擬【**】

#include 

#include

#include

#include

using

namespace

std;

char s1[1002],s2[1002],s3[1002];

intlist[35],l1,l2,l3;

int main()

for (int i=1;i<=l1;++i)

}for (int i=1;i<=26;++i)

for (int j=1;j<=26;++j)

if (i!=j&&list[i]==list[j])

for (int i=1;i<=26;++i)

if (!list[i])

for (int i=1;i<=l3;++i) printf("%c",(char)list[s3[i]-'a'+1]-1+'a');

}

題解 洛谷P1071 潛伏者

題意概括 給你一段原來截獲的英文密碼和與之對應的明文,如果密碼表非f a法,輸出 failed 否則翻譯現在給你的一句密文並輸出。所有字母均為大寫 有兩種情況視為密碼表非法 1 所有資訊掃瞄完畢,但發現有字母在原資訊中沒有出現 密碼表脫漏 2 掃瞄中發現掌握的資訊裡有明顯的自相矛盾或錯誤 密碼表錯亂...

洛谷 P1071 潛伏者 C語言題解

附上 include include include typedef struct dic int cnt 0 char a 101 char b 101 char message 101 int exist dic book,char n1,char n2 判斷在字典中是否已經存在,不存在返回0,...

洛谷P1071 潛伏者 字串

洛谷p1071 潛伏者 字串 題意 給出一段密文,在給出一段明文,再給出一段密文,要求破譯這段密文,如果錯誤的話就輸出 failed 錯誤有一下幾種 密文中a z 沒有全部出現 明文中a z 沒有全部出現 不同的密文對應不同的明文 或者也可以這與這樣說,不同的明文對應不同的密文 1 include ...