• 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;
    }
  • 相关阅读:
    企业云盘安全性如何 怎样部署
    Sentinel 控制台部署
    nginx代理静态页面添加二级目录
    java socket
    IDEA
    golang代码生成器
    es 单节点问题
    代码模板
    错误摘要 HTTP 错误 403.14
    安装.Net Framework 4.6.2无法安装的2种情况
  • 原文地址:https://www.cnblogs.com/staginner/p/2760207.html
Copyright © 2020-2023  润新知