poj2159

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <memory.h>

using namespace std;

int main()
{   int i,n,a[30],b[30];
    char org[200],code[200];
    bool judge;
    //freopen("in.txt","r",stdin);
    scanf("%s%s",code,org);
    n=strlen(org);
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    for (i=0;i<n;i++) a[org[i]-'A'+1]++;
    for (i=0;i<n;i++) b[code[i]-'A'+1]++;
    sort(a+1,a+27);
    sort(b+1,b+27);
    judge=true;
    for (i=1;i<=26;i++)
        if (a[i]!=b[i])
        {
            judge=false;
            break;
        }
    if (judge==true) cout<<"YES";else cout<<"NO";
    return 0;
}

一開始把題意理解錯了,將substitution cipher (置換密碼):當做按字典序偏移任意個位置。

明文與密文的“字母頻率的數組”應該是一樣的,即明文中某字母出現8次,密文中也必須有某個字母出現8次。

所以字母種類,字母頻率同時相等時,即被破解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章