这题的题意是给你一幅图,图里面有水滴。每一个水滴都有质量,然后再给你一个起点,他会在一開始的时候向四周发射4个小水滴,假设小水滴撞上水滴,那么他们会融合,假设质量大于4了,那么就会爆炸,向四周射出质量为一的水滴,问你在T时刻的时候,各个水滴的状态。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <math.h>
#include <queue>
#define maxn 1000000
#define inf (1e9 + 5)
#define mem(a, b) memset(a, b, sizeof(a))
using namespace std; int n, m, nn, T, ox[4] = {-1, 0, 1, 0}, oy[4] = {0, -1, 0, 1}, sx, sy;
int vis[105][105];
bool vis2[105]; struct node
{
int x, y, sizes, dis, dir;//坐标,质量,(距离)时间,方向。 }nd[105]; struct anss
{
int a, sizes, t = -1;
}ans[105]; void bfs()
{
queue<struct node> q;
struct node tt;
tt.x = sx;
tt.y = sy;
tt.dis = 0;
for(int i = 0;i < 4;i++)//起始的四个方向
tt.dir = i, q.push(tt);
mem(vis2, 0);
int dd = 0;
while(!q.empty())
{
struct node tmp = q.front();
q.pop();
if(tmp.dis > dd)//假设进入下一层,被引爆的水滴质量为0
{
for(int i = 1;i <= nn;i++)
if(vis2[i])
nd[i].sizes = 0;
mem(vis2, 0);
dd++;
}
if(tmp.dis + 1 > T)//假设时间大于T就不继续
continue;
int tmpx = tmp.x + ox[tmp.dir];
int tmpy = tmp.y + oy[tmp.dir];
if(tmpx <= 0||tmpx > n||tmpy <= 0||tmpy > m)//超出map
continue;
if(nd[vis[tmpx][tmpy]].sizes)//假设这个点有水滴
{
if(nd[vis[tmpx][tmpy]].sizes <= 3)//质量不会被引爆的时候
{
ans[vis[tmpx][tmpy]].a = 1;
ans[vis[tmpx][tmpy]].sizes = nd[vis[tmpx][tmpy]].sizes + 1;
ans[vis[tmpx][tmpy]].t = tmp.dis + 1;
nd[vis[tmpx][tmpy]].sizes += 1;
}
else if(nd[vis[tmpx][tmpy]].sizes > 3)//质量会被引爆的时候
{
ans[vis[tmpx][tmpy]].a = 0;
ans[vis[tmpx][tmpy]].sizes = nd[vis[tmpx][tmpy]].sizes + 1;
ans[vis[tmpx][tmpy]].t = tmp.dis + 1;
nd[vis[tmpx][tmpy]].sizes = 5;
if(!vis2[vis[tmpx][tmpy]])
{
vis2[vis[tmpx][tmpy]] = 1;
struct node jj;
jj.x = tmpx, jj.y = tmpy, jj.dis = tmp.dis + 1;
for(int i = 0;i < 4;i++)
jj.dir = i, q.push(jj);
}
}
}
else//没有水滴,继续按原方向射出
{
struct node jj;
jj.x = tmpx, jj.y = tmpy, jj.dis = tmp.dis + 1, jj.dir = tmp.dir;
q.push(jj);
}
}
} int main()
{
while(~scanf("%d%d%d%d", &n, &m, &nn, &T))
{
mem(vis, 0);
mem(ans, -1);
for(int i = 1;i <= nn;i++)
scanf("%d%d%d", &nd[i].x, &nd[i].y, &nd[i].sizes), vis[nd[i].x][nd[i].y] = i;
scanf("%d%d", &sx, &sy);
bfs();
for(int i = 1;i <= nn;i++)
{
if(ans[i].t != -1)
{
if(ans[i].a)
printf("%d %d\n", ans[i].a, ans[i].sizes);
else
printf("%d %d\n", ans[i].a, ans[i].t);
}
else
printf("1 %d\n", nd[i].sizes);
}
}
return 0;
}

HDU 5336 XYZ and Drops 2015 Multi-University Training Contest 4 1010的更多相关文章

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

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

  2. 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 ...

  3. HDU 5336——XYZ and Drops——————【广搜BFS】

    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 6406 Taotao Picks Apples (2018 Multi-University Training Contest 8 1010)(二分,前缀和)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=6406 思路: 暴力,预处理三个前缀和:[1,n]桃子会被摘掉,1到当前点的最大值,1到当前点被摘掉的桃子的 ...

  6. HDU 6141 - I am your Father! | 2017 Multi-University Training Contest 8

    思路来自 FXXL 最小树形图模板用kuangbin的 /* HDU 6141 - I am your Father! [ 最小树形图 ] | 2017 Multi-University Traini ...

  7. hdu 6319 Problem A. Ascending Rating (2018 Multi-University Training Contest 3 A)

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=6319 思路: 单调队列倒着维护,队列里面剩下的值的数量就是这一段区间的count值,如样例第一个区间:3 ...

  8. HDU 4946 Area of Mushroom(2014 Multi-University Training Contest 8)

    思路: 只有速度最大才有可能为1,速度不是最大肯定为0,那么就是 只需要操作那些速度最大的点,这些点求一个凸包,判断一下是不是在凸包边上即可. 有几个需要注意的地方: 1.最大速度如果为0   那么肯 ...

  9. HDU 4939 Stupid Tower Defense (2014 Multi-University Training Contest 7)

    思路:首先红色肯定要放在最后面.前面蓝色和绿色dp求解. dp[i][j]  表示前面(i+j) 个 有 i 个蓝色塔  j个绿色塔 能造成最大伤害. //====================== ...

随机推荐

  1. yield的概念及使用姿势

    概念: 当调用Thread.yield方法时,会给线程调度器一个当前线程愿意让出CPU使用的暗示,但是线程调度器可能会忽略这个暗示. 代码演示: public class YieldDemo impl ...

  2. java面试题之BeanFactory和FactoryBean的区别

    BeanFactory是个Factory,也就是IOC容器或对象工厂:FactoryBean是个Bean.在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的. ...

  3. Bootstrap 模态框(Modal)插件数据传值

    原文:http://blog.csdn.net/baalhuo/article/details/51178154 模态框具体代码如下: <!-- 模态框(Modal) --> <di ...

  4. hdu 3320 计算几何(三维图形几何变换)

    openGL Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  5. 20深入理解C指针之---程序的栈和堆

    一.程序在内存中的存储分段: 程序段主要包括:code段.data段.内核段.堆段和栈段 1.code段: 1).存储程序汇编后程序指令 2).此段中的数据是只读的 3).不能用于存储变量,可以存储常 ...

  6. est6 -- Object.is()、Object.assign()、Object.defineProperty()、Symbol、Proxy

    Object.is()用来比较两个值是否严格相等.它与严格比较运算符(===)的行为基本一致,不同之处只有两个:一是+0不等于-0,二是NaN等于自身. + === - //true NaN === ...

  7. HDU 5212 Code【莫比乌斯反演】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5212 题意: 给定序列,1≤i,j≤n,求gcd(a[i],a[j])∗(gcd(a[i],a[j] ...

  8. Codeforces 875C National Property(拓扑排序)

    题目链接  National Property 给定n个单词,字符集为m 现在我们可以把其中某些字母变成大写的.大写字母字典序大于小写字母. 问是否存在一种方案使得给定的n个单词字典序不下降. 首先判 ...

  9. 证书锁定Certificate Pinning技术

    证书锁定Certificate Pinning技术   在中间人攻击中,攻击主机通常截断客户端和服务器的加密通信.攻击机以自己的证书替代服务器发给客户端的证书.通常,客户端不会验证该证书,直接接受该证 ...

  10. Android 源码编译记录

    问题1:Can't locate Switch.pm in @INC (you may need to install the Switch module) (@INC contains: /etc/ ...