贪心(Ball,HDU 5821)
来源:互联网 发布:力帆租车软件叫什么 编辑:程序博客网 时间:2024/05/18 01:21
又是很多人都做出来了的题目,自己却没有做出来。
主要是思维上的障碍。
一方面自己应该想好了再来写。
确定好时间复杂度,正确性,编码复杂度。有一定把握了再来写代码。
一开始想了个大概,然后开始写,一边写一边想,代码的讨论很复杂,写完后自己的数据过不了,改了很久,然后感觉讨论不清了,然后觉得交一发WA算了。然后交上去TLE,然后发现时间复杂度O(n^3)。
少动键盘吧。
至于思考的话,也没思考得很彻底,就是先尝试了网络流,用流量来控制哪些球走那些路,然后发现没办法控制球的颜色。
m个操作有顺序,所以就考虑dp,但是感觉没什么可以dp的,状态定义都没什么想法。
然后感觉可以模拟。就是按顺序考虑每一个操作,然后找一个贪心的方法安排球。然后就决定讨论。然后就开始边写边想了。
主要考虑了区间是连续的,空间是一维的,这也是网络流没有利用到的细节。发现球只会往一边走,不会走回头路。
所以就讨论各种情况,决定每种颜色的球往哪边走,还是选一个位子定下来。
最后感觉根本讨论不清楚,已经花了大量的时间了。
最不应该的地方就是一边想一边写。
电脑只应该用来实现算法。
思考之类的事情应该用纸和笔来完成。
自己没有独立思考出来,只能事后总结一下。
贪心之类的方法,就算没办法正着思考出来,也可以尝试猜一个方法,然后再验证正确性,特别是这种通过数很多的题目。
思考的话可以优先考虑简单一点的办法,就算想到了一个正确的解法,也应该再思考一下有没有更简单的方法。
有一定把握了,再开始写代码。
多观察题目的特点。比较一下尝试过的方法为什么不行,有哪些特色没有利用到。
没有球的盒子也可以看成是一种特殊颜色的球。
代码
#include<stdio.h>#include<algorithm>using namespace std;const int maxn = 1010;int n,m;int b[maxn];struct Ball{ int val,pos; bool operator < (const Ball& rhs) const { return pos<rhs.pos; }}BL[maxn];void solve(){ scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&BL[i].val); BL[i].pos=-1; } for(int i=1;i<=n;i++) { scanf("%d",b+i); for(int j=1;j<=n;j++) if(BL[j].val==b[i]&&BL[j].pos==-1) { BL[j].pos=i; break; } } int l,r; while(m--) { scanf("%d %d",&l,&r); sort(BL+l,BL+r+1); } for(int i=1;i<=n;i++) if(BL[i].val!=b[i]) { puts("No"); return; } puts("Yes");}int main(){ int T; scanf("%d",&T); while(T--) solve(); return 0;}
阅读全文
0 0
- HDU 5821 Ball(贪心)
- [HDU 5821] Ball (贪心)
- HDU 5821 Ball (贪心)
- HDU 5821 Ball ( 贪心)
- HDU-5821-Ball(贪心)
- HDU 5821 Ball(贪心)
- HDU 5821 Ball(贪心)
- 贪心(Ball,HDU 5821)
- 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 4811 Ball(贪心)
- HDU 4811 Ball(贪心)
- CSDN写博客常用markdown语法举例
- 解决 Eclipse下启动 Tomcat无法访问 (图文)
- css中的一些常用选择器
- 深度学习:Embedding
- E
- 贪心(Ball,HDU 5821)
- 线程与进程
- Js_条件结构
- 序列化
- 同时存在js和jq时的相互定义转换
- Tomcat的结构和元素参数
- 运算符
- 软件开发相关职位方向
- jqure应用汇总