51Nod-1328-比赛往事
来源:互联网 发布:ios 知乎 编辑:程序博客网 时间:2024/05/22 07:00
ACM模版
描述
题解
这个题着实让我伤了一番脑筋,这里的贪心原则真不好琢磨,虽然知道为啥错了,却一直处理不好,25组数据 A 了24组,剩下一组特判过了才知道怎么搞。
先给一下官方题解吧:
这是个有趣的贪心问题,没想象的那么复杂。首先有一部分是必须换的,反正必须换不妨换个彻底,将place最大的与cutoff最大的匹配,place最小的与cutoff最小的匹配。如果成立就结束。不成立的话,再试图引入一个外部项,这步贪心即可。因为不是很难,所以这里就不细述细节了,留给大家思考。
好吧,最后一句话让我去理解一定是不是太难就是不好想的意思吧~~~
这里需要注意的是,如果不成立时,我们试图去引入一个外部项,如果还无法达成成立局面,大不了就再引入一个,毕竟我们无法通过两组之间进行调换达到目的时可以通过三组甚至更多组之间……这里就比较坑了,因为这里没有处理好,导致我有一组数据 TLE 了,说明我这个贪心准则不够完美,导致贪心贪不下去啦。
再也不想做这样的题了/(ㄒoㄒ)/~~
代码
#include <cstdio>#include <iostream>#include <algorithm>using namespace std;const int MAXN = 1010;int N;int p[MAXN], c[MAXN], cnt = 0;int p_[MAXN], c_[MAXN], cnt_ = 0;void ins(int *a, int k, int x){ while (k && a[k - 1] > x) { a[k] = a[k - 1]; k--; } a[k] = x;}int main(){ cin >> N; int a, b; for (int i = 0; i < N; i++) { scanf("%d%d", &a, &b); if (a <= b) { p[cnt] = a; c[cnt++] = b; } else { p_[cnt_] = a; c_[cnt_++] = b; } } sort(p_, p_ + cnt_); sort(c_, c_ + cnt_); while (true) { int tmp = cnt_ - 1; while (tmp >= 0 && p_[tmp] <= c_[tmp]) { tmp--; } if (tmp < 0) { break; } int tag = -1; for (int i = 0; i < cnt; i++) { if (p[i] <= c_[tmp] && c[i] >= p_[tmp] && (tag == -1 || p[i] < p[tag])) { tag = i; } } if (tag < 0) { for (int i = 0; i < cnt; i++) { if (c[i] >= p_[tmp] && (tag == -1 || p[i] < p[tag])) { tag = i; } } } if (tag < 0) { puts("-1"); return 0; } ins(p_, cnt_, p[tag]); ins(c_, cnt_, c[tag]); cnt_++; cnt--; p[tag] = p[cnt]; c[tag] = c[cnt]; } printf("%d", cnt_); return 0;}
0 0
- 51Nod-1328-比赛往事
- 往事
- 往事
- 往事
- 往事
- 往事
- 往事
- 往事
- 51Nod
- 51Nod
- 51nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- Maven实战之Web项目部署
- java中的final关键字
- SpringBoot实战 之 异常处理篇
- bzoj1453: [Wc]Dface双面棋盘
- 坚持#第176天~从容面对,微笑面对危险、不忘初心晨、我喜欢触控时的我
- 51Nod-1328-比赛往事
- 蓝桥杯 基础练习 字母图形 JAVA
- 递归读取文件夹下的文件
- 【23种设计模式】之 访问者模式(Visitor Pattern )
- Java实践(二)---Java常用集合
- 三角形面积计算
- SAPUI5拓展标准应用的View原理分析及应用实践
- 标准库类型vector
- plot图画多条折线图,如何把所有的折线都包含在图中呢(坐标轴范围如何设置)