题目:https://vjudge.net/problem/UVA-1339

题意:


给出两个字符串,判断其中一个字符串重新排序后能否通过一定的字母映射得到新的字符串,并使新的字符串与另一个字符串相等

思路:


cnt1[],cnt2[]分别记录两个字符串中每个字母出现的次数,并对这两个数组按照排序,若排序后的结果相同则输出YES,否则NO

sort()默认按照升序排列,以下两种方法可使其按照降序排列:

1.使用greater<int>()

sort(cnt1,cnt1+maxn,greater<int>());
sort(cnt2,cnt2+maxn,greater<int>());

2.自定义一个比较大小的函数

bool cmp(int x,int y)
{return x > y;
}
sort(cnt1,cnt1+maxn,cmp);
sort(cnt2,cnt2+maxn,cmp);

3.使用stdlib.h中的qsort()库函数,即快速排序算法

const void *是万能指针,可以通过强制类型转化成任意类型的指针(算法竞赛中还是比较常用sort)

int cmp(const void *a,const void *b)
{return *(int *)a-*(int *)b;
}
qsort(cnt1,maxn,sizeof(int),cmp);
qsort(cnt2,maxn,sizeof(int),cmp);

ac代码:


(我这里的cnt1[]和cnt2[]数组开的有些大,实际上只要存26个就可以了,懒得改了hha)

#include <iostream>
#include <cmath>
#include <string.h>
#include <ctype.h>
#include <algorithm>
#define maxn 100
#define inf 1e+9+10
using namespace std;
typedef long long ll;
int main()
{char s1[maxn],s2[maxn];while(scanf("%s",s1)==1){bool flag=true;int cnt1[maxn]={0},cnt2[maxn]={0};scanf("%s",s2);for(int i=0;i<strlen(s1);i++)cnt1[s1[i]-'A']++;for(int i=0;i<strlen(s2);i++)cnt2[s2[i]-'A']++;sort(cnt1,cnt1+maxn,greater<int>());sort(cnt2,cnt2+maxn,greater<int>());for(int i=0;i<=26;i++)if(cnt1[i]!=cnt2[i]){flag=false;break;}if(flag)printf("YES\n");elseprintf("NO\n");}return 0;
}

【UVA1339】古老的密码(巧妙思路+(q)sort降序排列的三种方法)相关推荐

  1. iPhone忘记锁屏密码,多次输错被禁用?三种方法轻松解决!

    为了保证手机的隐私安全,我们通常会将手机设置锁屏密码.最近有许多果粉反馈,自己长期不用的iPhone 忘记锁屏密码打不开了,多次输错密码还被禁用了,怎么办? 今天,小编就针对苹果手机忘记锁屏密码这个问 ...

  2. UVA1339 古老的密码 Ancient Cipher 排序

    UVA1339 古老的密码 Ancient Cipher 题目描述 古罗马帝国有一个拥有各种部门的强大政府组织.其中一个部门就是保密服务部门.为了保险起见,在省与省之间传递的重要文件中的大写字母是加密 ...

  3. Java 数组升序降序排列Arrays.sort( )通俗易懂

    方法一: 升序排列代码 import java.util.Arrays; import java.util.Comparator; public class Test{public static vo ...

  4. [mysql]三种方法为root账户指定密码

    前言:前段时间把mysql安装后一直没管它,当时就在奇怪为什么mysql登陆不要密码,原来一直用的超用户账户登陆的(简称超级用户) 其实只怪自己太无知,之前一直用的phpbydamin进行的数据库的可 ...

  5. JAVA 数组降序排列思路

    java数组的小练习 题目要求:在一个降序排列的数组中插入一个新的元素,使插入后的数组还是降序排列 整体思路比较复杂 分的比较细 用于理解数组,当然实际做项目还是直接使用函数方便 import jav ...

  6. MySQL修改密码(三种方法示例)

    在本教程中,您将学习如何使用以下几种方式:UPDATE,SET PASSWORD和ALTER USER语句来更改MySQL用户密码. 在更改MySQL用户帐户的密码之前,应该要先考虑以下几个问题: 要 ...

  7. MySQL修改初始密码三种方法:

    MySQL修改初始密码三种方法: 方法一: 1.使用空的初始密码登录mysql账号: mysql-uroot -p2.修改root密码: SETPASSWORD = PASSWORD('123456' ...

  8. 强力破解E-mail密码三种方法(转)

    强力破解E-mail密码三种方法(转)[@more@] 电子邮件并不是安全的,在邮件的发送.传送和接收整个过程中的每个环节都可能存在薄弱环节,恶意用户如果利用其漏洞,就能够轻易的破解出账号,获得邮件内 ...

  9. 怎么去掉PDF的密码?三种方法教你解决

    不知道大家有没有给文件加密的习惯,小编在处理工作文件时,经常会给文件加密,这样就可以很好的保证文件的准确性,不过在发送给其他人之后,我们就可以将PDF的密码去掉了,这样就不需要再输入密码了,那么我们该 ...

  10. 对List的升序与降序排列函数sort()

    Collections.sort(list);      //升序排列         Collections.sort(list,Collections.reverseOrder());       ...

最新文章

  1. 如何用java完成Excel快速的导入导出
  2. 全球100款大数据工具汇总(前50款)
  3. facelets_不要在facelets中重复表情
  4. python writerow参数_csv文件的输出结果TypeError writerow()接受2个位置参数,但给出了5个...
  5. 【mybatis】mybatis基础知识总结
  6. ubuntu修改默认root密码
  7. C语言全局变量与局部变量
  8. [RK3288][Android6.0] 调试笔记 --- 开机提示mmc rescan错误
  9. Win10以太网网络电缆被拔出怎么解决
  10. 水星MW300R V6(MT7620)CPU引脚图
  11. uniapp H5 实现地图选址功能
  12. 简易酒店管理系统(c++)
  13. Java 的历史和版本
  14. L298N模块的连接与使用(stm32驱动与51驱动)
  15. 双人成型无法连接远程计算机,《双人成行》无法连接到EA服务器怎么办 无法连接到EA服务器解决办法...
  16. cmd中cd命令使用
  17. 优化AWS使用成本系列之预留实例(RI)为您提供大幅折扣
  18. C语言写的md5函数
  19. 电信4G添加ctlte接入点提高网速
  20. 图形化开发(五)021-Three.js之材质——不受光影响-MeshBasicMaterial-同颜色MeshNormalMaterial-方向不同颜色LineBasicMaterial线条材质

热门文章

  1. SQLite异常:unsafenativemethods.sqlite3_open_interop
  2. 蓝桥杯 算法训练 数的潜能 正整数分解使得乘积最大问题
  3. 【Android综合应用】01 SmartRefreshLayout
  4. 【Java与智能设备】ch0501 Intent的使用
  5. 用户列表 html,用户列表.html
  6. 行军导航过程中导向箭头
  7. PHP分类输出代码,PHP无限分类代码,支持数组格式化、直接输出菜单两种方式_php技巧...
  8. redis命令行技术文档。命令教程
  9. 如何避免_如何避免钢板弹簧受损
  10. react组件卸载调用的方法_React组件如何还能跑得再快一点