思维-POJ 2159-Ancient Cipher

淩亂°似流年 2022-05-15 12:17 208阅读 0赞
  • 思维-POJ 2159-Ancient Cipher


  • 题目链接:

Ancient Cipher

  • 思路:

题目大意:

给出两种对文件加密的方式,替换和重新排列

替换:例如:替换规则可以是将’A’ 到 ‘Y’替换成它的下一个字符,将’Z’替换成 ‘A’,如果原词是 “VICTORIOUS” 则它变成 “WJDUPSJPVT”

重新排列:排列方法改变原来单词中字母的顺序。例如:将顺序<2, 8="">应用到 “VICTORIOUS” 上,则得到”IVOTCIRSUO”

给定两个字符串,如果第二个字符串通过加密能得到第一个字符串,输出YES

题解:

看清楚,对于替换和重新排列,题目并没有给具体规则,所有注定这道题考的是思维

先看替换,替换后,改变的是字符,但替换前后,这种字符的数量没有改变(替换是将字符串中所有该字符替换成另外一个字符),并且,字符串中字符的种类还是那么多

再看重新排列:改变的是字符的相对位置,字符的种类以及相应数量没有改变

综上,对两个字符串的字符种类和数量进行统计,如果字符串中的种类和数量相同,说明可以转换

  • 代码:

    include

    include

    include

    using namespace std;

    int Vis1[26] = { 0 };
    int Vis2[26] = { 0 };

    int main()
    {

    1. string str1, str2;
    2. cin >> str1 >> str2;
    3. int len1 = str1.length();
    4. int len2 = str2.length();
    5. if (len1 != len2)
    6. cout << "NO" << endl;
    7. else
    8. {
    9. for (int i = 0; i < len1; i++)
    10. {
    11. Vis1[str1[i] - 'A']++;
    12. Vis2[str2[i] - 'A']++;
    13. }
    14. sort(Vis1, Vis1 + 26);
    15. sort(Vis2, Vis2 + 26);
    16. for (int i = 0; i < 26; i++)
    17. {
    18. if (Vis1[i] != Vis2[i])
    19. {
    20. cout << "NO" << endl;
    21. return 0;
    22. }
    23. }
    24. cout << "YES" << endl;
    25. return 0;
    26. }

    }

发表评论

表情:
评论列表 (有 0 条评论,208人围观)

还没有评论,来说两句吧...

相关阅读

    相关 POJ2159 Ancient Cipher

    题目大意:字符串加密问题,采用字符替换和重新排列的综合方法加密。输入为加密串和字符串,不含空格的大写字母。 解题思路:两种加密方法在具体过程中应用并不唯一,即我们不

    相关 poj1695 dp思维 不错

    题意:给三辆车,将1~n这n个点依次跑完,也就是说要想到达i+1,必须先到达i, 每两个点之间都有花费,问最小的话费是什么。 思路:设dp\[i\]\[j\]\[k\],为