POJ2159 Ancient Cipher

來源:互聯網
上載者:User
Ancient Cipher
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 22896   Accepted: 7703

Description

Ancient Roman empire had a strong government system with various departments, including a secret service department. Important documents were sent between provinces and the capital in encrypted form to prevent eavesdropping. The most popular ciphers in those
times were so called substitution cipher and permutation cipher. 
Substitution cipher changes all occurrences of each letter to some other letter. Substitutes for all letters must be different. For some letters substitute letter may coincide with the original letter. For example, applying substitution cipher that changes
all letters from 'A' to 'Y' to the next ones in the alphabet, and changes 'Z' to 'A', to the message "VICTORIOUS" one gets the message "WJDUPSJPVT". 
Permutation cipher applies some permutation to the letters of the message. For example, applying the permutation <2, 1, 5, 4, 3, 7, 6, 10, 9, 8> to the message "VICTORIOUS" one gets the message "IVOTCIRSUO". 
It was quickly noticed that being applied separately, both substitution cipher and permutation cipher were rather weak. But when being combined, they were strong enough for those times. Thus, the most important messages were first encrypted using substitution
cipher, and then the result was encrypted using permutation cipher. Encrypting the message "VICTORIOUS" with the combination of the ciphers described above one gets the message "JWPUDJSTVP". 
Archeologists have recently found the message engraved on a stone plate. At the first glance it seemed completely meaningless, so it was suggested that the message was encrypted with some substitution and permutation ciphers. They have conjectured the possible
text of the original message that was encrypted, and now they want to check their conjecture. They need a computer program to do it, so you have to write one.

Input

Input contains two lines. The first line contains the message engraved on the plate. Before encrypting, all spaces and punctuation marks were removed, so the encrypted message contains only capital letters of the English alphabet. The second line contains the
original message that is conjectured to be encrypted in the message on the first line. It also contains only capital letters of the English alphabet. 
The lengths of both lines of the input are equal and do not exceed 100.

Output

Output "YES" if the message on the first line of the input file could be the result of encrypting the message on the second line, or "NO" in the other case.

Sample Input

JWPUDJSTVPVICTORIOUS

Sample Output

YES

Source

Northeastern Europe 2004這道題目是關於字母替換的,開始很快的寫出來了,通過了上面的測試案例,但是一提交就是WA。很是鬱悶,後來發現是題目沒讀懂。從A-Z變換到B-A只是題目中舉出的一個例子,沒說肯定是這樣變換。所以A可以映射為B,C卻也可以映射為Z。每個字母映射為哪個,我們並不知道。其二,映射後在進行順序置換,這個置換數組也不知道。所以想通過對給出的字元進行變換後判斷和給出的結果是否一致是行不通的。仔細分析發現,任何一個字母映射的結果是唯一的,如果在明文中x的個數為n,那麼在密文中一定有一個字母是x變換後的,所以它出現的機率和明文中x的出現機率必須相等。代碼如下:
#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>using namespace std;int main(){    const int MAX = 101;    char a[MAX];    char b[MAX];    char cnta[26],cntb[26];    memset(cnta,0,26);    memset(cntb,0,26);    scanf("%s%s",a,b);    for(int i=0;i<strlen(a);i++)        cnta[a[i]-'A']++;    for(int i=0;i<strlen(b);i++)        cntb[b[i]-'A']++;    int flag = 1;    sort(cnta,cnta+26);    sort(cntb,cntb+26);    for(int i=0; i<26; i++)    {        if(cnta[i]!=cntb[i])            {                flag = 0;                break;            }    }    if(flag)        printf("YES");    else        printf("NO");    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.