UVa 1339 Ancient Cipher --- 水题

  UVa 1339

  题目大意:给定两个长度相同且不超过100个字符的字符串,判断能否把其中一个字符串重排后,然后对26个字母一一做一个映射,使得两个字符串相同

  解题思路:字母可以重排,那么次序便不重要,可以分别统计两个字符串中的各个字母出现的次数,得到两个cnt[26]数组,

       又由于可以进行映射,则可以直接对两个数组进行排序后判断是否相等(相当于原来相等的值的两个地方做映射)

/* UVa 1339 Ancient Cipher --- 水题 */
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

char a[105], b[105];
int cnt1[30], cnt2[30];

int main()
{
#ifdef _LOCAL
    freopen("D:\\input.txt", "r", stdin);
#endif

    while (scanf("%s%s", a, b) == 2){
        memset(cnt1, 0, sizeof cnt1);
        memset(cnt2, 0, sizeof cnt2);
        int len1 = strlen(a);
        int len2 = strlen(b);

        //0-25记录A-Z
        for (int i = 0; i < len1; ++i){
            ++cnt1[a[i] - ‘A‘];
            ++cnt2[b[i] - ‘A‘];
        }

        sort(cnt1, cnt1 + 26);
        sort(cnt2, cnt2 + 26);

        bool flag = 1;
        for (int i = 0; i < 26; ++i){
            if (cnt1[i] != cnt2[i]){
                flag = 0;
                break;
            }
        }
        printf("%s\n", flag ? "YES" : "NO");
    }

    return 0;
}

时间: 2024-12-25 21:13:27

UVa 1339 Ancient Cipher --- 水题的相关文章

uva 1339 Ancient Cipher(字符串处理)

uva 1339 Ancient Cipher Ancient Roman empire had a strong government system with various departments, including a secret service department. Important documents were sent between provinces and the capital in encrypted form to prevent eavesdropping. T

UVa 1339 Ancient Cipher【排序】

/* 中文题目      古老的密码 中文翻译-大意  给你两个字符串,看你能不能将第一个字符变化位置(重排),变成和第二个字符串的26个字母一一对应. 解题思路:将两个字符串的各个字符的数量统计出来,如果各个字符串的数量都是一样的,那么就输出yes,否则输出no 难点详解:在统计每个字符出现的次数有点小难度 关键点:排序 解题人:lingnichong 解题时间:2014/08/26    00:36 解题体会:很好的一题 */ 1339 - Ancient Cipher Time limit

uva 1339 Ancient Cipher

大意:读入两个字符串(都是大写字母),字符串中字母的顺序可以随便排列.现在希望有一种字母到字母的一一映射,从而使得一个字符串可以转换成另一个字符串(字母可以随便排列)有,输出YES:否,输出NO:exp: 输入HAHAHEHE 输出YES 可以将A→E,或E→A: 关键在于,问题简化:因为不用考虑字母位置,所以可以分别统计两个字符串中不同字母出现次数,计入数组counts1和counts2.那么,怎么知道谁和谁对应呢?这里面有个隐含条件:如果A→B,那么A在1数组出现的次数和B在2数组中出现的次

POJ - 2159 - Ancient Cipher = 水题

http://poj.org/problem?id=2159 题意:给一种加密方式:先打乱,然后把字母换掉.求s串可不可以是t串的密文. 发现就是这种"可以"的情况就是字母的频率图排序后相同. #include<algorithm> #include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<map> #include

UVa 1586 Molar mass --- 水题

UVa 1586 题目大意:给出一种物质的分子式(不带括号),求分子量.本题中分子式只包含4种原子,分别为C.H.O.N, 原子量分别为12.01,1.008,16.00,14.01 解题思路:先实现一个从字符型的数到整型的数的转换函数,再将输入的串从头到尾扫描,遇到字母,则进一步扫描后面的数字的区间, 再调用函数进行转换,再乘以其的原子质量,最后累加到sum中即可. /* UVa 1586 Molar mass --- 水题 */ #include <cstdio> #include <

UVa 272 Tex Quotes --- 水题

题目大意:在TeX中,左引号是 ``,右引号是 ''.输入一篇包含双引号的文章,你的任务是把他转成TeX的格式 解题思路:水题,定义一个变量标记是左引号还是右引号即可 /* UVa 272 Tex Quotes --- 水题 */ #include <cstdio> #include <cstring> int main() { #ifdef _LOCAL freopen("D:\\input.txt", "r", stdin); #endi

UVa 1584 Circular Sequence --- 水题

UVa 1584 题目大意:给定一个含有n个字母的环状字符串,可从任意位置开始按顺时针读取n个字母,输出其中字典序最小的结果 解题思路:先利用模运算实现一个判定给定一个环状的串以及两个首字母位置,比较二者字典序大小的函数, 然后再用一层循环,进行n次比较,保存最小的字典序的串的首字母位置,再利用模运算输出即可 /* UVa 1584 Circular Sequence --- 水题 */ #include <cstdio> #include <cstring> //字符串s为环状,

UVa 1225 Digit Counting --- 水题

UVa 1225 题目大意:把前n(n<=10000)个整数顺次写在一起,12345678910111213...,数一数0-9各出现多少字 解题思路:用一个cnt数组记录0-9这10个数字出现的次数,先将cnt初始化为0,接着让i从1枚举到n, 对每个i,处理以活的i的每一个位置上的数,并在相应的cnt下标上+1 最后输出cnt数组即可 /* UVa 1225 Digit Counting --- 水题 */ #include <cstdio> #include <cstring

UVa 12342 Tax Calculator (水题,纳税)

今天在uva看到一个水题,分享一下. 题意:制定纳税的总额,有几个要求,如果第一个180000,不纳,下一个300000,纳10%,再一个400000,纳15%,再一个300000,纳20%,以后的纳25%,如果总额大于0但是不过2000,纳2000, 如果总金额不是整数,纳离它最近的且比它大的整数. 析:没什么可说的,算一下就行,也没坑. 代码如下: #include <bits/stdc++.h> using namespace std; const int s[] = {1180000,