hdoj5336
2015-08-02 17:53
274 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5336
题意:水滴爆炸形成四滴水 指向上下左右四个方向 下一秒流向四周 ;小水滴(流动中的水) 碰到大水滴 大水滴立即爆炸 ;(若同时多个方向水滴汇集到一个大水滴(融合) 全部融入后大水滴才爆炸)。
解题思路:用队列去维护,不断的模拟。很恶心的题目。没什么太大的技巧。
题意:水滴爆炸形成四滴水 指向上下左右四个方向 下一秒流向四周 ;小水滴(流动中的水) 碰到大水滴 大水滴立即爆炸 ;(若同时多个方向水滴汇集到一个大水滴(融合) 全部融入后大水滴才爆炸)。
解题思路:用队列去维护,不断的模拟。很恶心的题目。没什么太大的技巧。
#include <stdio.h> #include <iostream> #include <queue> #include <memory.h> #include <utility> using namespace std; const int MAX=100+5; int matrix[MAX][MAX],matrix1[MAX][MAX]; int dx[]={-1,1,0,0}; int dy[]={0,0,-1,1}; int dir[]={1,2,3,4}; typedef struct Grid { int x; int y; int T; int flag; }Grid; Grid grid[MAX]; typedef struct Drop { int x; int y; int dir; }Drop; int main() { int r,c,n,T; while(~scanf("%d %d %d %d",&r,&c,&n,&T)) { memset(matrix,0,sizeof(matrix)); memset(matrix1,0,sizeof(matrix1)); memset(grid,0,sizeof(grid)); queue<Drop> q1,q2; queue<pair<int,int> > q3; pair<int,int> pa; int x,y,num; for(int i=1;i<=n;i++) { scanf("%d %d %d",&x,&y,&num); grid[i].x=x; grid[i].y=y; matrix[x][y]=num; matrix1[x][y]=i; } scanf("%d %d",&x,&y); Drop d,d1; d.x=x; d.y=y; for(int i=0;i<4;i++) { d1.x=d.x+dx[i]; d1.y=d.y+dy[i]; d1.dir=dir[i]; if(d1.x>0&&d1.x<=r&&d1.y>0&&d1.y<=c) { q1.push(d1); } } for(int i=1;i<=T;i++) { if(i&1) { while(q1.size()) { d=q1.front(); q1.pop(); if(matrix[d.x][d.y]>0) { matrix[d.x][d.y]++; if(matrix[d.x][d.y]>4) <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>pa.first=d.x; <span style="white-space:pre"> </span>pa.second=d.y; <span style="white-space:pre"> </span>q3.push(pa); <span style="white-space:pre"> </span>} } else { for(int j=0;j<4;j++) { if(dir[j]==d.dir) { d.x+=dx[j]; d.y+=dy[j]; if(d.x>0&&d.x<=r&&d.y>0&&d.y<=c) { q2.push(d); } } } } } } else { while(q2.size()) { d=q2.front(); q2.pop(); if(matrix[d.x][d.y]>0) { matrix[d.x][d.y]++; if(matrix[d.x][d.y]>4) <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>pa.first=d.x; <span style="white-space:pre"> </span>pa.second=d.y; <span style="white-space:pre"> </span>q3.push(pa); <span style="white-space:pre"> </span>} } else { for(int j=0;j<4;j++) { if(dir[j]==d.dir) { d.x+=dx[j]; d.y+=dy[j]; if(d.x>0&&d.x<=r&&d.y>0&&d.y<=c) { q1.push(d); } } } } } } while(q3.size()) { int j; int k; pa=q3.front(); q3.pop(); j=pa.first; k=pa.second; if(matrix[j][k]>4) { matrix[j][k]=0; grid[matrix[j][k]].flag=0; grid[matrix1[j][k]].T=i; d.x=j; d.y=k; for(int z=0;z<4;z++) { d1.x=d.x+dx[z]; d1.y=d.y+dy[z]; d1.dir=dir[z]; if(d1.x>0&&d1.x<=r&&d1.y>0&&d1.y<=c) { if(i&1) { q2.push(d1); } else { q1.push(d1); } } } } } } for(int i=1;i<=r;i++) { for(int j=1;j<=c;j++) { if(matrix[i][j]) { grid[matrix1[i][j]].flag=1; grid[matrix1[i][j]].T=matrix[i][j]; } } } for(int i=1;i<=n;i++) { printf("%d %d\n",grid[i].flag,grid[i].T); } } return 0; }
相关文章推荐
- AXIS-web.xml里配置axis报错addChild: Child name 'AxisServlet' is not unique 解决办法
- stopcoroutine 不起作用
- 游戏引擎选择、Mac下和Windows下UnrealEngine 4体验对比
- 喵呜的虚拟城市(最短路)
- 【算法导论第五章】课后习题解析
- HDU 1016 Prime Ring Problem
- MSSQL数据库导入导出大全二(SQL语句)
- LAMP结合NFS完成小型博客站点建设
- 因为权限原因要在filter里使用spring- service所产生的问题
- LeetCode-- Construct Binary Tree from Preorder and Inorder Traversal
- typename typelink typeurl 和各种link
- /*用C#求一个数,它的九倍是它的反序数*/
- ssh无密码登陆
- 最长回文子序列的java解法
- svn如何提交.so文件
- Length of Last Word
- HDU 1878.欧拉回路【欧拉路及欧拉回路初接触】【8月2】
- Visual Assist X的用法
- Linux内核和驱动编译常见问题
- sql入门