cf Make It Nondeterministic (简单贪心)
有N个人。每个人都有两个名字。
给出这N个人的一个排列。p[1]...p[N]。
现在让每个人挑自己丙个名字中的一个名字。问是否存在一种方案,使得挑出来的N个名字按字典序排完以后正好是p[1]...p[N]。
思路:
按照p[1]..p[N]的顺序挑第p[i]个人名字中小的(要大于第p[i-1]个人挑出来的名字),若不行,则挑另一个。若另一个名字也不大于第p[i-1]个人挑出来的名字,就输出NO。
不多说,直接看代码。
代码:
int n;
string name1[100005];
string name2[100005];
string cun[100005];
int p[100005]; int main(){
scanf("%d",&n);
rep(i,1,n){
cin>>name1[i]>>name2[i];
}
rep(i,1,n){
scanf("%d",&p[i]);
if(i==1){
if(name1[p[i]]<name2[p[i]])
cun[1]=name1[p[i]];
else
cun[1]=name2[p[i]];
}else{
bool ok=false;
if(name1[p[i]]<name2[p[i]]){
if(name1[p[i]]>cun[i-1]){
ok=true;
cun[i]=name1[p[i]];
}
else if(name2[p[i]]>cun[i-1]){
ok=true;
cun[i]=name2[p[i]];
}
}else{
if(name2[p[i]]>cun[i-1]){
ok=true;
cun[i]=name2[p[i]];
}
else if(name1[p[i]]>cun[i-1]){
ok=true;
cun[i]=name1[p[i]];
}
}
if(!ok){
printf("NO\n");
return 0;
}
}
}
printf("YES\n");
}
稍微优化后的代码(更短些):
int n;
string name1[100005];
string name2[100005];
string cun[100005];
int p[100005]; int main(){
scanf("%d",&n);
rep(i,1,n){
cin>>name1[i]>>name2[i];
if(name1[i]>name2[i])
swap(name1[i],name2[i]);
}
rep(i,1,n){
scanf("%d",&p[i]);
if(i==1){
cun[1]=name1[p[i]];
}else{
if(name1[p[i]]>cun[i-1]){
cun[i]=name1[p[i]];
continue;
}
else if(name2[p[i]]>cun[i-1]){
cun[i]=name2[p[i]];
continue;
}
puts("NO");
return 0;
}
}
puts("YES");
}
cf Make It Nondeterministic (简单贪心)的更多相关文章
- CF 628C --- Bear and String Distance --- 简单贪心
CF 628C 题目大意:给定一个长度为n(n < 10^5)的只含小写字母的字符串,以及一个数d,定义字符的dis--dis(ch1, ch2)为两个字符之差, 两个串的dis为各个位置上字符 ...
- CF 435B Pasha Maximizes(贪心)
题目链接: [传送门][1] Pasha Maximizes time limit per test:1 second memory limit per test:256 megabytes ...
- Uva 11729 Commando War (简单贪心)
Uva 11729 Commando War (简单贪心) There is a war and it doesn't look very promising for your country. N ...
- CDOJ 1502 string(简单贪心)
题目大意:原题链接 相邻两个字母如果不同,则可以结合为前一个字母,如ac可结合为a.现给定一个字符串,问结合后最短可以剩下多少个字符串 解体思路:简单贪心 一开始读题时,就联想到之前做过的一道题,从后 ...
- ACM_发工资(简单贪心)
发工资咯: Time Limit: 2000/1000ms (Java/Others) Problem Description: 作为广财大的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的日 ...
- ACM_Ruin of Titanic(简单贪心)
Ruin of Titanic Time Limit: 2000/1000ms (Java/Others) Problem Description: 看完Titanic后,小G做了一个梦.梦见当泰坦尼 ...
- cf 605A Sorting Railway Cars 贪心 简单题
其实就是求总长度 - 一个最长“连续”自序列的长度 最长“连续”自序列即一个最长的lis,并且这个lis的值刚好是连续的,比如4,5,6... 遍历一遍,贪心就是了 遍历到第i个时,此时值为a[i], ...
- cf Learn from Life (简单贪心)
有N个人站在一楼.一个电梯最多承载K个人. 每个人都有一个想去的楼层.f[1]....f[N]. f[i]属于[2,2000] 从a层到b层需花费abs(a-b)秒. 问电梯送完所有人然后回到一楼至少 ...
- hdu 2037简单贪心--活动安排问题
活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,是可以用贪心算法有效求解的很好例子.该问题要求高效地安排一系列争用某一公共资源的活动.贪心算法提供了一个简单.漂亮的方法使得尽可能多的活动 ...
随机推荐
- 树莓派修改默认pi帐号亲测有效
# 树莓派修改默认pi帐号亲测有效### 1.我的树莓派机型:3B+,系统:Raspbian桌面标准版,连接的屏幕:电视机..###2.打开树莓派LX终端,快捷键:Ctrl+Alt+t ###3.输入 ...
- 使用metaweblog API实现通用博客发布 之 API测试
使用metaweblog API实现通用博客发布 之 API测试 使用博客比较少,一则是文笔有限,怕写出的东西狗屁不通,有碍观瞻, 二则是懒,很讨厌要登录到网站上写东西,也没有那么多时间(借口).个人 ...
- Jenkins持续交付实战演练
jenkins web hook机制 运行jenkins任务触发方式: 主动运行 定时构建 就算代码库没有更新,也会构建. 通过代码库主动触发Jenkins的构建任务 jenkins向外暴露一个触发器 ...
- javascript 继承 inheritance prototype
* Rectangle继承Shape function Shape() { this.x = 0; this.y = 0; } Shape.prototype.move = function(x, ...
- 定要过python二级 选择题第四套
1. 2. 3. 4. 5. 6. python用于人工智能 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
- 鸿蒙内核源码分析(并发并行篇) | 听过无数遍的两个概念 | 百篇博客分析OpenHarmony源码 | v25.01
百篇博客系列篇.本篇为: v25.xx 鸿蒙内核源码分析(并发并行篇) | 听过无数遍的两个概念 | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度 ...
- 多个ssh key 配置多个网址
多个 ssh key 配置多个网站 一.生成ssh key ssh-keygen -t rsa -C "你的邮箱" -f ~/.ssh/id_rsa_one ssh-keygen ...
- Jmeter压测学习5---HTTP Cookie管理器
我司项目暂时不需要,直接转载:https://www.cnblogs.com/yoyoketang/p/11963342.html 前言 web网站的请求大部分都有cookies,jmeter的HTT ...
- 三步搞定IDEA集成热部署
第一步.在你的SpringBoot项目中添加DevTools依赖 <!-- 热部署DevTools --> <dependency> <groupId>org.sp ...
- 关于布隆过滤器,手写你真的知其原理吗?让我来带你手写redis布隆过滤器。
说到布隆过滤器不得不提到,redis, redis作为现在主流的nosql数据库,备受瞩目:它的丰富的value类型,以及它的偏向计算向数据移动属性减少IO的成本问题.备受开发人员的青睐.通常我们使用 ...