西北大学集训队选拔赛 F-三生三世(STL set和map的简单应用)
F-三生三世
题目链接.
题目描述:
秦皇岛的海风轻轻地唱着歌唤醒了水上的涟漪,冬日的阳光把沙滩洒满了金黄。
BD哥在沙滩上留下了一串串脚印,突然他发现了一个石碑,上面刻着“HQDB”,下面还写着一个古老的年份。BD哥不由得想起了自己的ID:QBDH
“这个ID也太像我了吧?难道我曾经来过这个世界,那个年份就是上一世的我降临或者离去的时间?”BD哥不由得思考了起来。
“就算没有白浅夜华三生三世的爱情,有一个三生三世的灵魂也能羡煞众人啊!”单身二十多年的BD哥想。
BD哥认为,如果某一个ID是他的ID的全排列的一种,且和他的ID不一样,
便认为这个ID是他的前世,现在告诉你这个ID和BD哥的ID,请你帮忙判断,这个ID是不是他的前世。
输入描述:
输入的第一行包含一个整数n,代表字符串ID的长度。(n<=2e5)
接下来两行分别给出一个长度为n的字符串,可能包含所有大写字母及小写字母,先给出BD哥的ID,下一行给出需要判断的ID。
输出描述:
输出yes代表这个ID是BD哥的前世,no代表不是。
示例1
输入
4
QBDH
BQDH输出
yes
示例2
输入
5
jwjnb
jwjnb输出
no
思路详解
阅读题目加粗黑体字可知,我们只需要判断第二个字符串是否为第一个全排列中的一种即可,刚开始的想法也许是去全排列第一个字符串的所有情况,再判断第二个字符串是否与其中一种情况相同,但注意输入描述中的id长度最大可达2e5,无论是用dfs深搜全排列还是用STL已有的功能函数next_permutation(),很明显已经预见超时的结局了,所以此时我们应该抓住后者字符串满足前者字符串全排列情况的条件来做:
①第二个字符串长度不能大于前者(由全排列可知:可以小于第一个字符串的长度)且二个字符串不能相同(见样例二)。
②第二个字符串拥有的每种字符元素必须在第一个字符串中能找到,即第二个字符串不存在新元素。
③基于上面两点以及全排列的知识,第二个字符串每种元素的映射值 ≤ 第一个字符串对应元素的映射值,例如:
s1:aab s2:ab
t1[a] = 2, t1[b] = 1; t2[a] = 1,t2[b] = 1;
t2对应的下标a,b的映射值都大于t1对应元素的映射值,故 s2为s1全排列。
根据以上三点条件,就可以利用STL中set集合的去重性和map映射来将s1、s2中的元素和值分别置入至两种容器中,便于后续的处理。
#include<bits/stdc++.h>
using namespace std;
map<char, int>a, b;
set<char> t1, t2;
int main() {int n;cin >> n;//建议使用string作为字符串类型,方便后续第②条件的查找string s1, s2;cin >> s1 >> s2;//判断最后结果是否为全排列中的一种情况,1为不是,0为是int flag = 0;//①条件一判断if (s1 == s2 || s2.length() > n) {flag = 1;} else {//将元素和元素值置入两种容器中for (int i = 0; i < n; i++) {a[s1[i]]++;t1.insert(s1[i]); }for (int i = 0; i < s2.length(); i++) {b[s2[i]]++;t2.insert(s2[i]);}set<char>::iterator it;for (it = t2.begin(); it != t2.end(); it++) {//②查找是否存在新元素if (s1.find(*it) == string::npos) {flag = 1;break;}//③判断同一个字母在两个字符串的映射值关系if (b[*it] > a[*it]) {flag = 1;break;}}}if (flag == 1) {cout << "no" << endl;} else {cout << "yes" << endl;}
}
西北大学集训队选拔赛 F-三生三世(STL set和map的简单应用)相关推荐
- 【DP】西北大学集训队选拔赛(重现赛) B 饱和式救援
链接:https://ac.nowcoder.com/acm/contest/892/B 来源:牛客网 题目描述 "在全球性救援开始的0.42秒后,MOSS就已经推算出结果,这是一场注定徒劳 ...
- 晾衣服,西北大学集训队选拔赛(重现赛)
链接:https://ac.nowcoder.com/acm/contest/892/C 来源:牛客网 题目:晾衣服 鸡尾酒从杭州回来,囤积了许多衣服,洗好之后,他发现晾衣服是一件麻烦的事. 晾衣绳的 ...
- 腾讯张正友:计算机视觉的三生三世
本文转载自:腾讯AI实验室 本文将介绍腾讯 AI Lab & Robotics X 主任张正友博士在 CCF-GAIR 2019 大会上所做的报告,讲述计算机视觉研究的历史和未来. 7 月 1 ...
- 腾讯 AI Lab Robotics X 主任张正友博士:计算机视觉的三生三世 | CCF-GAIR 2019
今年是中国人工智能四十年,在这四十年间发生了很多事情,听听张正友博士讲一讲计算机视觉的前世.今生和可能的未来. 雷锋网 AI 科技评论按:7 月 12 日-7 月 14 日,2019 第四届全球人工智 ...
- 深度 | 张正友:计算机视觉的三生三世 | CCF-GAIR 2019
https://www.toutiao.com/i6713143613334749703/ 今年是中国人工智能四十年,在这四十年间发生了很多事情,听听张正友博士讲一讲计算机视觉的前世.今生和可能的未来 ...
- 张正友:计算机视觉的三生三世
文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 来源 | AI科技评论(id:aitechtalk) 今年是中国人工智能四十年,在这四十年间发生了很多 ...
- 张正友博士:计算机视觉的三生三世
犀牛鸟中学创新科研营作为犀牛鸟中学科学人才培养计划的重要环节于近期开营,开营仪式邀请了哈佛大学.清华大学丘成桐教授.腾讯AI Lab及腾讯Robotics X实验室主任张正友博士以及来自清华大学.中国 ...
- 有赞订单管理的三生三世与“十面埋伏”
https://tech.youzan.com/trade_manage/ 有赞订单管理主要承接有赞所有订单搜索及详情展示功能,系统随着业务的不断发展经历了多次飞升之路.下面简单介绍下有赞订单管理系统 ...
- 风靡全球的GANs:一文看尽这“混世魔王”的“三生三世”
点击我爱计算机视觉标星,更快获取CVML新技术 本文转载新智元. 也许您已经了解到,当前的人工智能已经可以生成类似于人类的语音,或者生成难以与真实照片区分开的人物图像,甚至达到足以"以假乱真 ...
最新文章
- 点一万个赞:商汤SiamRPN目标跟踪最强算法开源
- boost::dynamic_property_map相关的测试程序
- linux C 基于链表链的定时器
- 【PyTorch】lr_scheduler.StepLR==>调整学习率的方法
- 如何在html文件中包含其他html文件
- 自学笔记 - 购物篮关联分析-两两相关
- oracle中dual最多存多大_ORACLE中dual用法详解
- matlab 音频处理、Python音频处理
- 【图像分割】基于matlab粒子群优化T熵图像分割【含Matlab源码 286期】
- webstorm破解之jar包破解(2018)
- python生成字典脚本
- 不得不知的高速PCB设计中各类地的处理方法
- mysql规格单位转化_存储单位的换算(KB, MB, GB)
- python第八天 运算符的使用
- bzoj 3375: [Usaco2004 Mar]Paranoid Cows 发疯的奶牛
- 一键构建云上高可用蛋白质结构预测平台
- ubuntu 安装浏览器flash插件
- 三次样条拟合(附完整代码)
- Swing设置窗体背景图片
- 职业生涯规划需要考虑的三大要点
热门文章
- POJ 1947 Rebuilding Roads (树dp + 背包思想)
- 命中注定码农路[一. 重新开始]
- iOS 9之Safari广告拦截器(Content Blocker)
- 刚刚开通博客,分享Asp.Net的GridView的基本用法
- Xcode 真机测试破解方法(转加修改)xcode 4.3 通过
- [转]Java书籍Top 10
- href中使用javascript:void(0)无法执行操作
- 7-40 最大的数 (10 分)
- 7-218 修理牧场 (25 分)
- 基于顺序存储结构的图书信息表的排序(C++)