HDU 5336——XYZ and Drops——————【广搜BFS】
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
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
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).
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.
#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】的更多相关文章
- Hdu 5336 XYZ and Drops (bfs 模拟)
题目链接: Hdu 5336 XYZ and Drops 题目描述: 有一个n*m的格子矩阵,在一些小格子里面可能会有一些水珠,每个小水珠都有一个size.现在呢,游戏开始咯,在一个指定的空的小格子里 ...
- hdu 2717 Catch That Cow(广搜bfs)
题目链接:http://i.cnblogs.com/EditPosts.aspx?opt=1 Catch That Cow Time Limit: 5000/2000 MS (Java/Others) ...
- 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 ...
- HDU 5336 XYZ and Drops
Problem Description XYZ is playing an interesting game called "drops". It is played on a r ...
- HDU 5336 XYZ and Drops 2015 Multi-University Training Contest 4 1010
这题的题意是给你一幅图,图里面有水滴.每一个水滴都有质量,然后再给你一个起点,他会在一開始的时候向四周发射4个小水滴,假设小水滴撞上水滴,那么他们会融合,假设质量大于4了,那么就会爆炸,向四周射出质量 ...
- hdu 1253:胜利大逃亡(基础广搜BFS)
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- poj3126 Prime Path 广搜bfs
题目: The ministers of the cabinet were quite upset by the message from the Chief of Security stating ...
- hdu 1253 胜利大逃亡 (广搜)
题目链接 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个ABC的立方体,可以被表示成A个 ...
- 算法学习笔记(六) 二叉树和图遍历—深搜 DFS 与广搜 BFS
图的深搜与广搜 复习下二叉树.图的深搜与广搜. 从图的遍历说起.图的遍历方法有两种:深度优先遍历(Depth First Search), 广度优先遍历(Breadth First Search),其 ...
随机推荐
- 【转】使用母版页时内容页如何使用css和javascript
源地址:https://www.cnblogs.com/accumulater/p/6767138.html
- 洛谷P2518 [HAOI2010]计数
题目描述 你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数.比如说给定{1,2},那么可以生成数字12,21,102,120,201,210,1002,1020,等等. ...
- 解决织梦手机网站M文件夹动态游览不生成html
今天的做手机网站的时候,发现dede织梦M文件夹下会生成index.html.对于手机网站来说,太麻烦了.每次更新手机网站首页都要把index.html删除掉重新生成. 然而织梦不支持手机网站首页动态 ...
- LinkedList实现原理
原文链接:https://www.jianshu.com/p/56c77c517e71 本文对LinkedList的实现讨论都基于JDK8版本 Java中的LinkedList类实现了List接口和D ...
- FFT字符串匹配
本文半原创 参考资料:其实就是照抄的什么参考啊 我们知道KMP可以用来在线性复杂度内进行制胡窜匹配 今天教您一种新方法:用FFT进行字符串匹配 您可能觉得这很玄学,FFT不是做多项式卷积的吗,怎么还可 ...
- 10.20 olinr
感谢olinr提供md文件 免得我整理格式了 1.求助 (help.cpp/c/pas) [问题背景] 马上就要noip了,lrt同志\(\displaystyle\begin{vmatrix}\te ...
- 灾后重建 Floyd
题目背景 BBB地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两个重建完成的村庄的公路 ...
- PXE刷机,存储节点失败
最近刚刚帮客户对一台满配的X6-2刷机初始化,尝试了下PXE方式,但刷完机后,发现计算节点的imagehistory输出的状态都是成功的,而所有的存储节点状态都为failure,具体如下: [root ...
- C#空接合操作符——??
操作符: ?? 用法:C = A ?? B; 解释:if(A != null){ C=A;} else{C=B} 类似三元运算符 :? 例子: Int32? num1=null; Int32? ...
- CF 给你三个数字L, R, K,问在[L, R]范围内有多少个数字满足它每一位不同数字不超过k个,求出它们的和(数位DP)
题意: 给你三个数字L, R, K,问在[L, R]范围内有多少个数字满足它每一位不同数字不超过k个,求出它们的和 分析:考虑用状态压缩 , 10给位0~9 , 如果之前出现过了某个数字x ,那就拿当 ...