XYZ and Drops

Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1250    Accepted Submission(s): 407

Problem Description
XYZ is playing an interesting game called "drops". It is played on a r∗c grid. Each grid cell is either empty, or occupied by a waterdrop. Each waterdrop has a property "size". The waterdrop cracks when its size is larger than 4, and produces 4 small drops moving towards 4 different directions (up, down, left and right).

In every second, every small drop moves to the next cell of its direction. It is possible that multiple small drops can be at same cell, and they won't collide. Then for each cell occupied by a waterdrop, the waterdrop's size increases by the number of the small drops in this cell, and these small drops disappears.

You are given a game and a position (x, y), before the first second there is a waterdrop cracking at position (x, y). XYZ wants to know each waterdrop's status afterT seconds, can you help him?

1≤r≤100, 1≤c≤100, 1≤n≤100, 1≤T≤10000

 
Input
The first line contains four integers r, c, n and T. n stands for the numbers of waterdrops at the beginning. 
Each line of the following n lines contains three integers xi, yi, sizei, meaning that the i-th waterdrop is at position (xi, yi) and its size is sizei. (1≤sizei≤4)
The next line contains two integers x, y.

It is guaranteed that all the positions in the input are distinct.

Multiple test cases (about 100 cases), please read until EOF (End Of File).

 
Output
n lines. Each line contains two integers Ai, Bi: 
If the i-th waterdrop cracks in T seconds, Ai=0, Bi= the time when it cracked. 
If the i-th waterdrop doesn't crack in T seconds, Ai=1, Bi= its size after T seconds.
 
Sample Input
4 4 5 10
2 1 4
2 3 3
2 4 4
3 1 2
4 3 4
4 4
 
Sample Output
0 5
0 3
0 2
1 3
0 1
 
题目大意:r行c列,n个水坑,时间T。xi,yi,vi表示水坑的位置和起始水量。x,y表示在这个位置在0时间发生迸射,水坑消失,在上下左右四个方向各自形成1个容量为1的小水滴,且如果不受水坑影响时,每单位时间向迸射方向前进1单位距离。其他的水坑会在水量超过4的时候发生迸射,水坑消失,形成小水滴。小水滴相遇不会出现反应,当小水滴出边界即消失,跟大水坑相遇时,融进大水坑,水坑水量增加1单位,小水滴消失。如果在同一时间有多个小水滴到达该水坑,那么如果超过4容量后,后面同时到达的小水滴就当做是融合在该水坑中,即消失。
 
#include<bits/stdc++.h>
using namespace std;
const int maxn=110;
struct WaterDrops{ //水坑
int x,y;
WaterDrops(){}
WaterDrops(int xx,int yy){
x=xx,y=yy;
}
}waterdrops[maxn];
struct Drops{ //水滴
int x,y;
int dir,t;
Drops(){}
Drops(int xx,int yy,int d,int tt){
x=xx,y=yy,dir=d,t=tt;
}
}drops[maxn*5];
int crack[maxn][maxn],Map[maxn][maxn];//记录迸射、水坑容量
int f[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int r,c,T;
queue<Drops>Q;
bool inside(int x,int y){ //判断是否在边界中
if(x>=1&&x<=r&&y>=1&&y<=c){
return true;
}else{
return false;
}
}
void BFS(){
int xx, yy, tt, d,tx,ty;
Drops st;
while(!Q.empty()){
st=Q.front();
xx=st.x,yy=st.y,d=st.dir,tt=st.t;
Q.pop();
if(Map[xx][yy]){ //如果该位置还有水坑
Map[xx][yy]++;
if(Map[xx][yy]>4){
Map[xx][yy]=0; //容量置0
crack[xx][yy]=tt;//记录迸射时间
for(int i=0;i<4;i++){
tx=xx+f[i][0],ty=yy+f[i][1];
if(inside(tx,ty)){
if(tt+1<=T){
Q.push(Drops(tx,ty,i,tt+1));
}
}
}
}
}else if(crack[xx][yy]!=tt){//如果没有水坑或水坑迸射,且当前小水滴不是跟发生迸射的那个小水滴同时到达
tx=xx+f[d][0];
ty=yy+f[d][1];
if(inside(tx,ty)){
if(tt+1<=T){
Q.push(Drops(tx,ty,d,tt+1));
}
}
} }
}
void init(){
while(!Q.empty())
Q.pop();
memset(Map,0,sizeof(Map));
memset(crack,0,sizeof(crack));
}
int main(){
int n,xx,yy,val,tx,ty;
while(scanf("%d%d%d%d",&r,&c,&n,&T)!=EOF){
init();
for(int i=1;i<=n;i++){
scanf("%d%d%d",&xx,&yy,&val);
waterdrops[i].x=xx,waterdrops[i].y=yy;
Map[xx][yy]=val;
}
scanf("%d%d",&xx,&yy);
crack[xx][yy]=1;
for(int i=0;i<4;i++){
tx=xx+f[i][0];
ty=yy+f[i][1];
if(inside(tx,ty)){
Q.push(Drops(tx,ty,i,1));
}
}
BFS(); for(int i=1;i<=n;i++){
tx=waterdrops[i].x,ty=waterdrops[i].y;
if(Map[tx][ty]==0){
printf("0 %d\n",crack[tx][ty]);
}else{
printf("1 %d\n",Map[tx][ty]);
}
}
}
return 0;
}

  

HDU 5336——XYZ and Drops——————【广搜BFS】的更多相关文章

  1. Hdu 5336 XYZ and Drops (bfs 模拟)

    题目链接: Hdu 5336 XYZ and Drops 题目描述: 有一个n*m的格子矩阵,在一些小格子里面可能会有一些水珠,每个小水珠都有一个size.现在呢,游戏开始咯,在一个指定的空的小格子里 ...

  2. hdu 2717 Catch That Cow(广搜bfs)

    题目链接:http://i.cnblogs.com/EditPosts.aspx?opt=1 Catch That Cow Time Limit: 5000/2000 MS (Java/Others) ...

  3. 2015 Multi-University Training Contest 4 hdu 5336 XYZ and Drops

    XYZ and Drops Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  4. HDU 5336 XYZ and Drops

    Problem Description XYZ is playing an interesting game called "drops". It is played on a r ...

  5. HDU 5336 XYZ and Drops 2015 Multi-University Training Contest 4 1010

    这题的题意是给你一幅图,图里面有水滴.每一个水滴都有质量,然后再给你一个起点,他会在一開始的时候向四周发射4个小水滴,假设小水滴撞上水滴,那么他们会融合,假设质量大于4了,那么就会爆炸,向四周射出质量 ...

  6. hdu 1253:胜利大逃亡(基础广搜BFS)

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  7. poj3126 Prime Path 广搜bfs

    题目: The ministers of the cabinet were quite upset by the message from the Chief of Security stating ...

  8. hdu 1253 胜利大逃亡 (广搜)

    题目链接 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个ABC的立方体,可以被表示成A个 ...

  9. 算法学习笔记(六) 二叉树和图遍历—深搜 DFS 与广搜 BFS

    图的深搜与广搜 复习下二叉树.图的深搜与广搜. 从图的遍历说起.图的遍历方法有两种:深度优先遍历(Depth First Search), 广度优先遍历(Breadth First Search),其 ...

随机推荐

  1. C#:最简洁强大的代码生成器

    这是我们项目中最常用,也是最强大的代码生成器,可以自动生成 存储过程,Model,DAL,BLL 多层的脚本. 第一步:配置config,设置连接的数据库 <?xml version=" ...

  2. Go:创建新进程(os.StartProcess源码解读)

    关于如何使用go语言实现新进程的创建和进程间通信,我在网上找了不少的资料,但是始终未能发现让自己满意的答案,因此我打算自己来分析这部分源代码,然后善加利用,并且分享给大家,期望大家能从中获得启发. 首 ...

  3. loj#6435. 「PKUSC2018」星际穿越(倍增)

    题面 传送门 题解 我们先想想,在这个很特殊的图里该怎么走最短路 先设几个量,\(a_i\)表示\([a_i,i-1]\)之间的点都和\(i\)有边(即题中的\(l_i\)),\(l\)表示当前在计算 ...

  4. 解决vue-cli相对路径问题 about css assert path ,two Solution(css路径的问题解决方案) #179

    https://github.com/vuejs/vue-cli/issues/179

  5. 「BZOJ3065」带插入区间第K小值 替罪羊树×线段树

    题目描述 从前有\(n\)只跳蚤排成一行做早操,每只跳蚤都有自己的一个弹跳力\(a_i\).跳蚤国王看着这些跳蚤国欣欣向荣的情景,感到非常高兴.这时跳蚤国王决定理性愉悦一下,查询区间\(k\)小值.他 ...

  6. zabbix监控nginx进程

    确认nginx有没有安装模块 然后在主站点下添加(二级站点) location /NginxStatus { stub_status on; access_log off; allow 127.0.0 ...

  7. springboot整合mybatis,redis,代码(三)

    一 说明 接着上篇讲述redis缓存配置的用法: 二 正文 首先要使用缓存就必须要开开启缓存,第二步是需要开redis-server 下载redis包之后,点击图中两个都可以开启redis 怎么看是否 ...

  8. maven mirrorOf

    转载 http://blog.csdn.net/isea533/article/details/21560089 在maven中配置一个mirror时,mirror通常会设置成*,还有可能是一个具体的 ...

  9. keepalived企业管理

    实践案例一:更改nginx反向代理只监听vip地址 10.0.0.3/nana.html 可以使用 10.0.0.5/nana.html  不可以使用 10.0.0.6/nana.html  不可以使 ...

  10. redis实现SSO单点登录,集群,分布式锁

    https://blog.csdn.net/aussme/article/details/80660443