POJ 2159

作者: DeamoV | 来源:发表于2018-01-09 12:13 被阅读15次

题目LINK

题意解释

这道题读题的时候需要注意的是
1. 字母可以转成不同于自己的其他大写字母。
2. 转换完成后可以随意换位置。
所以,我们不能想着用ASCII码值进行转换 ,把译码和原文的字母出现的次数进行统计对比。

收获

自己本身的AC太过于“面条式了”,选的别人的AC代码。这个代码我学到了,用memset来初始化数组,以及简历字母表这种方式来处理这种问题。

AC代码

#include <iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const char *s="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int maxn=26;
int a[maxn],b[maxn];
string maze;
string org;
int main()
{
    cin>>maze>>org;
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    if(maze.length()!=org.length()) printf("NO\n");
    else {
                for(int i=0;i<maxn;i++)
                {
                    for(int j=0;j<org.length();j++)
                    {
                        if(s[i]==org[j]) a[i]++;
                        if(s[i]==maze[j]) b[i]++;
                    }
                }
                sort(a,a+maxn);
                sort(b,b+maxn);
                int t=1;
                for(int i=0;i<maxn;i++)
                    if(a[i]!=b[i]) 
                    {
                        t=0;
                        break;
                    }
                if(t) printf("YES\n");
                else printf("NO\n");
           }
    return 0;
}

相关文章

网友评论

      本文标题:POJ 2159

      本文链接:https://www.haomeiwen.com/subject/qnpwnxtx.html