zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    how to fix bug in daily work
    我终究还是辞职了
    Nutch1.7学习笔记:基本环境搭建及使用
    线性表的基本操作
    GROUP BY中ROLLUP/CUBE/GROUPING/GROUPING SETS使用示例
    一步一步学android控件(之六) —— MultiAutoCompleteTextView
    echo命令写shell
    注入问题0x00
    Apache解析漏洞详解
    MySQL注入
  • 原文地址:https://www.cnblogs.com/worldcreator-zh/p/10584734.html
Copyright © 2011-2022 走看看