hdu_5536_多校联赛4_1010
2015-07-31 22:27
309 查看
啊啊啊,简直要崩溃,题意是说有很多大水滴,当大水滴尺寸>=5时,会分裂成四个小水滴,然后向上下左右四个方向射去,当碰到另一个大水滴时就会融合到里面去,问你T时刻的状态。
思路极为简单的模拟,只需要模拟小水滴的状态就行,但是当时比赛现场管理员有很多误导,导致很多人不能够正确理解题意,首先,R为X的范围,C为Y的范围,admin直接说反,爆WA,其次,当大水滴分裂之后,原地点的状态表述不明,既然SIZE为0,那么以后由小水滴凝聚的时候会不会再次融合,这个地方就需要枚举题意,差评。
最后,放速度更快代码以示嘲讽,勿喷。
![](http://img.blog.csdn.net/20150731222507070)
![](http://img.blog.csdn.net/20150731222655495)
偶对,再放一组神数据
94 98 7 200
30 21 4
18 4 4
18 46 3
36 21 3
11 5 4
30 5 3
18 21 4
22 5
ANS:
0 46
0 75
0 117
0 76
0 11
0 30
0 58
思路极为简单的模拟,只需要模拟小水滴的状态就行,但是当时比赛现场管理员有很多误导,导致很多人不能够正确理解题意,首先,R为X的范围,C为Y的范围,admin直接说反,爆WA,其次,当大水滴分裂之后,原地点的状态表述不明,既然SIZE为0,那么以后由小水滴凝聚的时候会不会再次融合,这个地方就需要枚举题意,差评。
最后,放速度更快代码以示嘲讽,勿喷。
偶对,再放一组神数据
94 98 7 200
30 21 4
18 4 4
18 46 3
36 21 3
11 5 4
30 5 3
18 21 4
22 5
ANS:
0 46
0 75
0 117
0 76
0 11
0 30
0 58
[code]#include <cstdio> #include <queue> #include <cstring> using namespace std; const int dx[4] = { 0, 1, 0, -1 }; const int dy[4] = { 1, 0, -1, 0 }; struct point{ int x,y; int size; }a[105]; struct yu{ int x,y; int dir; }; struct map{ int size; int time; }m[105][105]; int main(){ freopen("in.txt","r",stdin); queue <yu> q2; queue <yu> q1; int r,c,n,t; int x,y; yu tmp,tt; while(~scanf("%d%d%d%d",&r,&c,&n,&t)){ memset(m,0,sizeof(m)); memset(a,0,sizeof(a)); for(int i=1;i<=n;i++){ scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].size); m[a[i].x][a[i].y].size=a[i].size; } scanf("%d%d",&x,&y); for(int i=0;i<=3;i++){ if(x+dx[i]<=r&&x+dx[i]>0&&y+dy[i]<=c&&y+dy[i]>0){ tmp.x=x; tmp.y=y; tmp.dir=i; q1.push(tmp); } } for(int i=1;i<=t;i++){ while(1){ if(i%2){ if(q1.empty()) break; tmp=q1.front(); q1.pop(); } else{ if(q2.empty()) break; tmp=q2.front(); q2.pop(); } x=tmp.x+dx[tmp.dir]; y=tmp.y+dy[tmp.dir]; if(!(x<=r&&x>0&&y<=c&&y>0)) continue; tt.x=x; tt.y=y; tt.dir=tmp.dir; if(m[x][y].size) m[x][y].size++; else { if(i%2) q2.push(tt); else q1.push(tt); } } for(int j=1;j<=n;j++) if(m[a[j].x][a[j].y].size>=5){ m[a[j].x][a[j].y].time=i; m[a[j].x][a[j].y].size=0; for(int jj=0;jj<=3;jj++) if(a[j].x+dx[jj]<=r&&a[j].x+dx[jj]>0&&a[j].y+dy[jj]<=c&&a[j].y+dy[jj]>0){ tmp.x=a[j].x; tmp.y=a[j].y; tmp.dir=jj; if(i%2) q2.push(tmp); else q1.push(tmp); } } } for(int i=1;i<=n;i++){ if(m[a[i].x][a[i].y].time>0) printf("0 %d\n",m[a[i].x][a[i].y].time); else printf("1 %d\n",m[a[i].x][a[i].y].size); } while(!q1.empty()) q1.pop(); while(!q2.empty()) q2.pop(); } return 0; }
相关文章推荐
- 【Python】词典
- 一种造成“无法编译所做的编辑”的情况
- 初识Ajax
- 小米变身杂货店 透支品牌还是扩展道路?
- (。・`ω´・)智能手机
- 我们的应用场景与http的不同
- 表格中的正文如何排版?
- [Cocoa]_[界面切换]
- 系统托盘中Win10升级程序不存在的解决办法
- [转]关于实验验证
- 常用Linux命令
- [LeetCode][Java] Palindrome Partitioning
- Leetcode # 148 Sort List
- 人生最大的捷径,是用时间和生命读一流的书
- 计蒜客ACM 最大子阵列 java
- Struts2中Action返回Json串
- ( ̄▽ ̄") 没钱了
- p2098
- POJ 1797 Heavy Transportation
- MVC——studying