• Ancient Cipher UVA


    https://vjudge.net/problem/UVA-1339

    这题虽然不难,我猜好多人和我一样开始根本看不懂这题什么玩意,因为刘汝佳的篇幅太短了,而网站上的原题又是英语劝退,再加上有道不说人话。。。。。

    如果你只想看懂题目:

    它意思就是有两种加密方式,一种用字母间的映射关系,另一种用重排任意个字母的顺序。

    ①:我的理解它说的映射不是固定的一种,并不是说全部按照例子里的一样{a->z z->a 其他顺延},这只是一种,它的具体映射关系并不会告诉你,你只要直到它的映射只能是一对一的,且只会          单独用一种!比如HEHE和HAHA能返回YES,其中就是E->A

    ②:这个一般都能理解,就是可以随便排序,所以该问题一定与顺序无关。

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    题解:

    只要记录每个字母出现的次数在数组book1[26]和book2[26]里,再将数组排序,如果两个数组相同则这两个串一定可以通过某种映射获得。因为他可以通过映射交换来调整每个字母的权(次数)最终肯定能让两个串对应上的。

    #include<iostream>
    #include<string>
    #include<algorithm>
    using namespace std;
    
    int main()
    {
        string S1, S2; int cnt1[26], cnt2[26];
        while (cin >> S1 >> S2)
        {
            memset(cnt1, 0, sizeof(cnt1)); memset(cnt2, 0, sizeof(cnt2));
            
            string::iterator it = S1.begin();
            for (; it != S1.end(); it++)
                cnt1[*it - 65]++;
    
            it = S2.begin();
            
            for (; it != S2.end(); it++)
                cnt2[*it - 65]++;
            
            sort(cnt1, cnt1 + 26);
            sort(cnt2, cnt2 + 26);
            bool flag = true;
            for (int i = 0; i < 26; i++)
            {
                if (cnt1[i] != cnt2[i]) flag = false;
            }
            if (flag)cout << "YES";
            else cout << "NO";
            cout << endl;
        }
        return 0;
    }
  • 相关阅读:
    PAT(B) 1037 在霍格沃茨找零钱(Java)
    PAT(B) 1043 输出PATest(Java)统计
    PAT(B) 1063 计算谱半径(Java)
    绘制虚线
    contentMode
    数字签名是什么
    动态设置 button的 name 的话 闪动的问题 解决
    setValuesForKeysWithDictionary 的用法
    获得 当前时间
    iOS 键盘类型
  • 原文地址:https://www.cnblogs.com/worldcreator-zh/p/10584734.html
Copyright © 2020-2023  润新知