HDU 5821 Ball (贪心排序) -2016杭电多校联合第8场
来源:互联网 发布:js二维数组排序函数 编辑:程序博客网 时间:2024/05/22 04:41
题目链接:这里
题意:T组数据,每组给定一个n一个m,在给定两个长度为n的数组a和b,再给定m次操作,每次给定l和r,每次可以把[l,r]的数进行任意调换位置,问能否在转换后使得a数组变成b数组。
解法:贪心,用结构体存储a数组,一共两个域,一个是值,一个是下标,这个下标指的是他最后应该在的位置即这个值在b数组中的下标。随后m次操作可以看做是对a数组的lr这个区间进行m次sort,sort是根据下标从小到大排序,这样会使得这个数向他应该在的位置偏移,就是把a数组往b数组上靠,该向左的向左去,该向右的向右去,如果最后的时候都偏移到了自己应该在的位置就是Yes,否则就是No。复杂度O(max((n*n),(m*n*log(n))))。
//HDU 5821#include <bits/stdc++.h>using namespace std;struct node{ int x, id; node(){} node(int x, int id) : x(x), id(id) {} bool operator < (const node &rhs) const{ return id < rhs.id; }}a[1005];int b[1005];int main(){ int T, n, m; scanf("%d", &T); while(T--){ scanf("%d%d", &n, &m); for(int i = 0; i < n; i++){ scanf("%d", &a[i].x); a[i].id = -1; } for(int i = 0; i < n; i++){ scanf("%d", &b[i]); for(int j = 0; j < n; j++){ if(a[j].x == b[i] && a[j].id == -1){ a[j].id = i; break; } } } while(m--){ int l, r; scanf("%d%d", &l, &r); sort(a+l-1, a+r); } bool flag = 1; for(int i = 0; i < n; i++){ if(a[i].x != b[i]){ flag = 0; break; } } puts(flag?"Yes":"No"); } return 0;}
0 0
- HDU 5821 Ball (贪心排序) -2016杭电多校联合第8场
- hdu 5821 ball(多校第八场,贪心)
- hdu 5821 Ball(2016 Multi-University Training Contest 8——贪心+排序)
- Hdu-5821 Ball(贪心)
- HDU 5821 Ball【贪心】
- HDU 5821 Ball 贪心
- HDU-5821 <2016 Multi-University Training 8> 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 贪心+模拟
- 【原创】Linux 终端 vim…
- 【原创】host 文件
- android studio 版本控制1-------github
- Java hashCode的重要性
- 【原创】 Window 7&nbsp…
- HDU 5821 Ball (贪心排序) -2016杭电多校联合第8场
- 链表相关操作
- 【原创】 Window7 mysql…
- 关于Oracle 12c 多租户架构中的db_files参数.
- 【原创】 MySQLdb.cursors&nb…
- 是否可以在一个static()方法的内部发出对非static()方法的调用?
- 【原创】mysql 终端查询
- loadrunner接口性能测试获取返回参数再传参脚本
- 【原创】 Window7 vs201…