zoukankan      html  css  js  c++  java
  • LA 3213 Ancient Cipher

    LA_3213

        题目的大意是将第二个字符串中的每个字符先做一个一一映射,然后再将各个字符打乱(也就是选择性地变换一下位置),问能否变成第一个字符串。

        这个问题中有一个守恒量,就是各类字符的数量,比如一开始各类字符的数量分别为1、2、2、3的话,那么无论怎么变换,最后各类字符的数量一定还是1、2、2、3,只不过之前有3个的可能是A,而现在变成了有3个的是B,或者Y,或者其他的字符等等。而且,如果各类字符在数量上能够一一对应的话,那么一定可以通过某种手段将第二个字符串变成第一个字符串,所以我们只需判断各类字符的数量上能否一一对应。

    #include<stdio.h>
    #include<string.h>
    #define MAX 130
    char a[MAX], b[MAX];
    int n[MAX];
    int main()
    {
        while(scanf("%s%s", a, b) == 2)
        {
            bool ok = true;
            memset(n, 0, sizeof(n));
            for(int i = 'A'; i <= 'Z'; i ++)
            {
                int cnt = 0;
                for(int j = 0; a[j]; j ++) if(a[j] == i) ++ cnt;
                ++ n[cnt];
                cnt = 0;
                for(int j = 0; b[j]; j ++) if(b[j] == i) ++ cnt;
                -- n[cnt];
            }
            for(int i = 1; i <= 100; i ++) if(n[i]) ok = false;
            puts(ok ? "YES" : "NO");
        }
        return 0;
    }
  • 相关阅读:
    JQuery 快速入门一篇通
    Winform 显示Gif图片
    MD5编码工具类 MD5Code.java
    Asp.Net 上传图片并生成高清晰缩略图
    winform时钟c#代码
    PHP面试题汇总
    PHP条件语句语法与示例
    Android声音播放实例代码
    html和js基础功能代码备份
    纯C#实现屏幕指定区域截屏
  • 原文地址:https://www.cnblogs.com/staginner/p/2760207.html
Copyright © 2011-2022 走看看