UVa1339(古老的密码)
UVa1339(古老的密码)
题目:古老的密码
题目描述:
给定两个长度一样且不超过100的字符串,判断是否能把其中一个字符串的各个字母重排,之后对26个字母做一个一一映射,使得两个字符串相同
例如,JWPUDJSTVP重排后可以得到WJDUPSJPVT,之后把每个字母映射到它的前面一个字母,得到VICTORIOUS,输入两个字符串,输出YES或者NO
题目分析:
因为字母可以重排,每个字母的位置并不重要,重要的是每个字母出现的次数
①统计两个字符串每个字母出现的次数,得到两个数组cnt1[26],cnt2[26]
②之后我们排序下,排序之后结果相同,说明我们输入的两个字符串就可以通过重排一一映射变得相同了所以本道题的核心在与【排序】
学习笔记:
关于排序
①C语言中stdlib.h中又一个叫qsort的库函数,
qsort的声明void qsort(void base, size_t num, size_t size, int(cmp)(const void , const void ));
如果排序是整型数组的话,
int cmp(const void a, const void b)
{
return (int )a - (int )b;
}
②c++中又一个函数sort更加常用些,头文件#include<algorithm>
默认sort是按升序排列,sort(a,a+n) 两个参数分别为待排序数组的首地址和尾地址
也可以写一个判定函数,按照自己的意愿排列
bool compare(const int a, const int b)
{
return a < b;
}
==============================================================================
参考代码:
//.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxn 100 + 10int cmp(const void *a, const void *b)
{return *(int *)a - *(int *)b;
}int main()
{char a[maxn];char b[maxn];while(scanf("%s%s", a,b) != EOF){int len = strlen(a);int cnt1[26],cnt2[26];memset(cnt1,0,sizeof(cnt1));memset(cnt2,0,sizeof(cnt2));for(int i=0; i < len; i++){cnt1[a[i] - 'A']++;cnt2[b[i] - 'A']++;}//排序qsort(cnt1,26,sizeof(cnt1[0]),cmp);qsort(cnt2,26,sizeof(cnt2[0]),cmp);for(int i=0; i < 26; i++){if(cnt1[i] != cnt2[i]){printf("NO\n");return 0;}}printf("YES\n");}return 0;
}//.cpp
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
#define maxn 100 + 10bool cmp(const int a, const int b)
{return a<b;
}int main()
{string a,b;while(cin >> a >> b){int len = a.length();int cnt1[26],cnt2[26];memset(cnt1,0,sizeof(cnt1));memset(cnt2,0,sizeof(cnt2));for(int i=0; i < len; i++){cnt1[a[i] - 'A']++;cnt2[b[i] - 'A']++;}//排序sort(cnt1,cnt1+26,cmp);sort(cnt2,cnt2+26,cmp);for(int i=0; i < 26; i++){if(cnt1[i] != cnt2[i]){cout<<"NO"<<endl;return 0;}}cout<<"YES"<<endl;}return 0;
}
UVa1339(古老的密码)相关推荐
- UVA1339 古老的密码 Ancient Cipher 排序
UVA1339 古老的密码 Ancient Cipher 题目描述 古罗马帝国有一个拥有各种部门的强大政府组织.其中一个部门就是保密服务部门.为了保险起见,在省与省之间传递的重要文件中的大写字母是加密 ...
- UVA1339 古老的密码 Ancient Cipher 题解
题意翻译 [题目描述] 古罗马帝国有一个拥有各种部门的强大政府组织.其中一个部门就是保密服务部门.为了保险起见,在省与省之间传递的重要文件中的大写字母是加密的.当时最流行的加密方法是替换和重新排列. ...
- uva1339古老的密码
此题比较简单,主要一点就是注意字符串的元素可以交换顺序然后才映射. 注意,在排序的地方可以直接调用c语言中的qsort函数或者c++语言中的sort函数. #include <stdio.h&g ...
- 例题4-1 UVA1339 古老的密码 Ancient Cipher
输入两个串,问能不能按照一定规则映射.但是怎么映射没说,其实就是统计两个字符串各个字母出现的次数,然后分别对这两个次数序列排序,看看排完之后的两个序列是不是相同,就可以判断了, #include &l ...
- 例题4-1 古老的密码 UVa1339
算法竞赛入门经典(第2版)第4章 函数和递归 例题4-1 古老的密码 UVa1339 感悟. 1.阅读书中题目,对映射方式(B->A,C->B,...,Z->Y),印象深刻,马上编码 ...
- 例题 4-1 古老的密码(Ancient Cipher) UVa 1339
题目:古老的密码 题目描述: 给定两个长度一样且不超过100的字符串,判断是否能把其中一个字符串的各个字母重排,之后对26个字母做一个一一映射,使得两个字符串相同 例如,JWPUDJSTVP重排后可以 ...
- UVa1339(古老的密码)C语言实现
题目描述: 给定两个长度一样且不超过100的字符串,判断是否能把其中一个字符串的各个字母重排,之后对26个字母做一个一一映射,使得两个字符串相同.例如,JWPUDJSTVP重排后可以得到WJDUPSJ ...
- 例题4-1 古老的密码(Ancient Cipher, NEERC 2004, UVa1339)
题目:给定两个长度相同且不超过100的字符串,判断是否能把其中一个字符串的各个字母重排,然后对26个字母做一个一一映射,使得两个字符串相同.例如,JWPUDJSTVP重排后可以得到WJDUPSJPVT ...
- 古老的密码(Ancient Cipher,UVa1339)(算法竞赛入门经典 例题4-1)C++
题目:给定两个不超过100的字符串,判断是否可以做到将其中一个字符串通过重排和映射的操作,使得两个字符串相同.例如,JWPUDJSTVP重排后可以得到WJDUPSJPVT,然后每个字母只要通过一次映射 ...
最新文章
- 为什么阿里巴巴要求日期格式化时必须有使用y表示年,而不能用Y?
- 上海人工智能再出重磅!寒武纪科技发布新一代云端AI芯片,联想、曙光、科大讯飞发布相关应用...
- 中有atoi函数吗_C++ 多态的实现及原理,深挖vptr指针,手动调用虚函数
- Python函数传入的参数是否改变(函数参数、指针、引用)
- 拒绝做思想的巨人,行动上的矮子
- 虚拟机 ubuntu10.04 安装 Mercury MW150U 无线网卡(AR9271芯片组)
- C#启动前为所有的Form设置统一的Icon
- 已经被说“烂”的微服务,到底是个什么鬼?通过拆分实战案例来带你入门。...
- MySQL binlog_format (Mixed,Statement,Row)
- 吉利博越L为何被称为新三好SUV
- app测试和接口测试区别
- 史上最完整基于Springboot实现进销存管理系统
- 基于springboot的高校疫情打卡上报系统设计与实现 文档+项目源码及数据库文件+演示视频
- 【云和恩墨大讲堂】SQL 审核 | 细致入微,方显价值
- 杰理之Dongle【篇】
- Dremel made simple with Parquet(CN)
- java课外兴趣小组管理系统_课外兴趣小组计划
- webgl_图形变换(旋转,平移,缩放)
- 如何在lion系统下安装Xcode 3.2.x版本
- 推荐 :处理非结构化数据的7个实例(附链接)