HDU 5821 多校脑洞题贪心
来源:互联网 发布:it狂人第二季 编辑:程序博客网 时间:2024/05/12 04:40
题意:
有N个盒子,每个盒子最多装一个球. 球的颜色不一定相同.
现在要进行m次区间操作:
每次操作 [l, r] 后可以随意将区间内的球重新分配回去.
问经过上述操作后是否有可能达到给定的状态.
思路
贪心.
首先应该明白 待操作数据与目标数据是一一对应的关系,然后接下来就去想,如何可以判断是否可以匹配上。
为每个球记录它在最终结果中的序号. 对于颜色相同的球:左边的尽量分配小的序号.
对于m次区间操作,就将区间[l,r]中的球按最终序号排序.
每次排序都相当于让区间中的球向它们的最终位置更近一步.
最终再比较是否每个球都到位
#include<bits/stdc++.h>#define LL long long using namespace std; /// const int maxn = 100000+10;int n,t,m,b[maxn];struct st{int val,pos;}q[maxn];bool cmp(st x,st y){ return x.pos<y.pos;}int main(){ scanf("%d",&t); while(t--){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ scanf("%d",&q[i].val); q[i].pos=-1; } for(int i=1;i<=n;i++){ scanf("%d",&b[i]); } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(q[j].val==b[i]&&q[j].pos==-1){ q[j].pos=i; break; } } } while(m--){ int l,r; scanf("%d%d",&l,&r); sort(q+l,q+r+1,cmp); } int fg=0; for(int i=1;i<=n;i++){ if(q[i].val!=b[i]){ fg=1; break; } } if(!fg) puts("Yes"); else puts("No"); } return 0;}
1 0
- HDU 5821 多校脑洞题贪心
- Hdu-5821 Ball(贪心)
- HDU 5821 Ball【贪心】
- HDU 5821 Ball 贪心
- HDU 5821 Ball(贪心)
- [HDU 5821] Ball (贪心)
- HDU 5821 Ball (贪心)
- HDU 5821 Ball ( 贪心)
- HDU 5821 Ball 贪心+映射
- HDU-5821-Ball(贪心)
- HDU 5821-A - Ball-贪心
- HDU 5821 Ball(贪心)
- HDU 5821 Ball(贪心)
- Hdu 5821 Ball 贪心+模拟
- 贪心(Ball,HDU 5821)
- hdu 5821 Ball 贪心+思维
- HDU 贪心
- 【贪心】hdu
- 如何通过Retrofit提交Json格式数据
- 整理——Activity四种加载模式 launch mode
- 多校赛第八场
- VS2010/MFC编程入门之十六(对话框:消息对话框)
- Masonry介绍与使用实践(快速上手Autolayout)
- HDU 5821 多校脑洞题贪心
- javascript事件触发、监听和其游览器兼容问题
- 【emoji表情】阿里云数据库RDS支持emoji表情
- 第一次提交代码到github上(超简单详细)
- 欢迎使用CSDN-markdown编辑器
- iOS 实现时间线列表效果
- 初识mvc
- Java 图片淡入淡出
- 线程创建与控制