HDU5821 Ball 2016多校第八场01
来源:互联网 发布:锐速 原理 知乎 编辑:程序博客网 时间:2024/06/07 09:05
HDU5821 Ball (2016多校第八场01)
题目
大意:给两串序列,不同数字表示不同的球,0表示没有,例如:
1 0 0 0
0 0 0 1
再给定一组区间,例如:
1 3
3 4
依次对区间内球重新放置,问最后能否从第一行变换成第二行序列。
题解
假设有4个红球,初始时从左到右标为1,2,3,4。那么肯定存在一种方案,使得最后结束时红球的顺序没有改变,也是1,2,3,4。 那么就可以把同色球都写成若干个不同色球了。所以现在共有n个颜色互异的球。按照最终情况标上1,2,。。,n的序号,那么贪心的来每次操作就是把一个区间排序就行了。 ——学军中学
其实就是很简单的一个贪心,将A跟B匹配后,给A按照B的顺序重新标号,然后每次按区间对A排序,最后看是否能得到B。
比赛的时候基本没有什么有用的思路,看过的学校越来越多,被卡了,哎,还是思维不够开阔。
代码
#include <iostream>#include <algorithm>using namespace std;int main(){ int T, n, m, a[1006], b[1006], s[1006], i, j, l, r, t; bool flag; cin>>T; while(T--) { cin>>n>>m; flag = 0; for(i = 1; i <= n; ++i) { cin>>a[i]; } for(i = 1; i <= n; ++i) { cin>>t; for(j = 1; j <= n; ++j) if(a[j] == t) { a[j] = -1; s[j] = i; break; } if(j>n) flag = 1; } //for(i = 1; i <= n; ++i) // cout<<s[i]<<' '; //cout<<endl; for(i = 1; i <= m; ++i) { cin>>l>>r; sort(s+l, s+r+1); } for(i = 1; i <= n; ++i) if(s[i] != i) flag = 1; if(flag) cout<<"No"<<endl; else cout<<"Yes"<<endl; } return 0;}
0 0
- HDU5821 Ball 2016多校第八场01
- 2016多校训练Contest8: 1001 Ball hdu5821
- HDU5821-Ball
- hdu 5821 ball(多校第八场,贪心)
- 2016多校8 hdu5821 Ball 智商题
- 【1】【匹配】HDU5821 Ball
- 【HDU5821】Ball(贪心)
- hdu5821 Ball 贪心
- hdu5821(2016多校第8场,暴力)
- 多校第八场
- 多校第八场
- 多校第八场
- 多校联赛第八场
- 湖南多校第八场
- 20160811多校:(hdu5821 Ball)【贪心+排序】
- hdu 4605 Magic Ball Game 多校第一场
- 2013 多校第一场 hdu 4605 Magic Ball Game
- HDU 5826 2016多校联赛 第八场1006
- Ionic简介和环境安装
- php --post中提交数组参数
- MySQL enum类型及在PHP中的使用
- HDU 5821 Ball 贪心+映射
- Intel汇编语言程序设计学习-第四章 数据传送、寻址和算术运算-下
- HDU5821 Ball 2016多校第八场01
- windows下mongodb安装与使用整理
- HDU5831 Rikka with Parenthesis II 2016多校第八场11
- 堆排序(Heapsort)
- 2016多校8 HDU 5828 Rikka with Sequence 线段树优化
- 二分图染色
- multiple definition of 错误原因
- 51Nod-1416-两点
- 求最大子序列和