1. 程式人生 > >UVa-1339-古老的密碼

UVa-1339-古老的密碼

這題的話,我們可以把字串序列裡面的字母直接計數,然後比較兩個數組裡面的數字是否一一相同,然後就可以直接判定YES or NO。

因為它題目中說的就是一種對映的關係,首先我們讀入之後,把兩個字串的不同字母個數給統計出來,然後我們做一個排序,排序之後,如果這兩個數字序列的長短是一樣的,就說明有對映的可能性。

然後我們一一比較,只有每次每個從前向後的陣列格子裡面的填的數字個數相同才是可以的,因為這樣直接就可以把密碼序列裡面的字母對映到答案序列的字母上,然後就得到答案了,這題不要想太多。

#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
int cnt1[30],cnt2[30];

bool cmp(int a,int b)
{
    return a > b;
}   

int main()
{
    string a, s;
    while (cin>>s>>a) {
        bool flag = 1;
        memset(cnt1, 0, sizeof(cnt1));
        memset(cnt2, 0, sizeof(cnt2));
        for (int i = 0; i < s.length(); i++) {
            cnt1[s[i] - 'A']++;
            cnt2[a[i] - 'A']++;
        }
        sort(cnt1, cnt1 + 30,cmp);
        sort(cnt2, cnt2 + 30,cmp);
        for (int i = 0; cnt1[i] != 0;i++) {
            if (cnt1[i]==cnt2[i]) {
                continue;
            }
            else {
                flag=0;
                break;
            }
        }
        if (flag)
            cout << "YES" << endl;
        else
            cout << "NO" << endl;
    }
    return 0;
}