HDU-4527 小明系列故事——玩转十滴水 模拟
题意:就是平时玩的十滴水游戏,游戏者拥有一定的水滴,能够滴在某些位置,如果一个点上的体积超过了4就会爆炸,向四周传递一个小水滴。该题就是要求模拟这个过程。
分析:这里有一个问题就是不能够使用递归来处理这个过程,因为水滴拥有速度,如果是递归调用的话,那么可能本来应该同时到达某点的水滴变成不同时间到达了。处理该题使用了两个队列,分别模拟当前时刻,和下一时刻,每次从当前时刻取出所有的水滴,再视情况处理加入到下一时刻的队列中。有个地方要注意就是同时到达某一点的水滴加上原来的水滴超过了5那么视作和5等效。
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std; int mp[][];
int m;
struct Node {
int x, y, d;
Node() {}
Node(int _x, int _y, int _d) : x(_x), y(_y), d(_d) {}
};
queue<Node>q[]; int dir[][] = {, , , -, , , -, }; bool judge(int x, int y) {
if (x < || x > || y < || y > ) return false;
else return true;
} void go(int x, int y) {
if (mp[x][y] < ) {
mp[x][y]++;
return;
}
int cur = , nxt = , xx, yy;
mp[x][y] = ;
for (int i = ; i < ; ++i) {
xx = x+dir[i][], yy = y+dir[i][];
if (judge(xx, yy)) {
q[cur].push(Node(xx, yy, i));
}
}
Node tmp;
while (!q[cur].empty()) {
while (!q[cur].empty()) {
tmp = q[cur].front();
q[cur].pop();
if (mp[tmp.x][tmp.y] == ) {
if (judge(xx=tmp.x+dir[tmp.d][], yy=tmp.y+dir[tmp.d][])) {
q[nxt].push(Node(xx, yy, tmp.d));
}
} else {
mp[tmp.x][tmp.y]++;
}
}
for (int i = ; i <= ; ++i) {
for (int j = ; j <= ; ++j) {
if (mp[i][j] >= ) {
mp[i][j] = ;
for (int k = ; k < ; ++k) {
xx = i + dir[k][], yy = j + dir[k][];
if (judge(xx, yy)) {
q[nxt].push(Node(xx, yy, k));
}
}
}
}
}
swap(cur, nxt);
}
} void print() {
for (int i = ; i <= ; ++i) {
for (int j = ; j <= ; ++j) {
printf(j == ? "%d\n" : "%d ", mp[i][j]);
}
}
} int main() {
while (scanf("%d", &mp[][]) != EOF) {
for (int i = ; i <= ; ++i) {
scanf("%d", &mp[][i]);
}
for (int i = ; i <= ; ++i) {
for (int j = ; j <= ; ++j) {
scanf("%d", &mp[i][j]);
}
}
scanf("%d", &m);
int x, y;
while (m--) {
scanf("%d %d", &x, &y);
go(x, y);
}
print();
puts("");
}
return ;
}
HDU-4527 小明系列故事——玩转十滴水 模拟的更多相关文章
- hdu 4506 小明系列故事——师兄帮帮忙【幂取模乱搞】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=4506 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- hdu 4542 小明系列故事——未知剩余系
小明系列故事——未知剩余系 题意:操作0表示某数有n个约数,操作1为某数有n个非约数:n <= 47777,若是存在小于2^62的数符合,则输出该数,否则若是不存在输出Illegal,若是大于2 ...
- HDU 4511 小明系列故事——女友的考验 (AC自动机+DP)
小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...
- HDU 4511 小明系列故事——女友的考验 (AC自动机 + DP)
小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...
- hdu 4542 小明系列故事——未知剩余系 反素数 + 打表
小明系列故事——未知剩余系 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Prob ...
- HDU 4828 小明系列故事——捉迷藏
漂亮妹子点击就送:http://acm.hdu.edu.cn/showproblem.php?pid=4528 Time Limit: 500/200 MS (Java/Others) Memo ...
- HDU - 4511 小明系列故事――女友的考验(AC自己主动机+DP)
Description 最终放寒假了,小明要和女朋友一起去看电影.这天,女朋友想给小明一个考验,在小明正准备出发的时候.女朋友告诉他.她在电影院等他,小明过来的路线必须满足给定的规则: 1.如果小明 ...
- hdu 4542 "小明系列故事——未知剩余系" (反素数+DFS剪枝)
传送门 参考资料: [1]:https://blog.csdn.net/acdreamers/article/details/25049767 题意: 输入两个数 type , k: ①type = ...
- hdu 4506 小明系列故事——师兄帮帮忙
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4506 题目大意:找规律,判断k的t次幂前面的系数. #include <iostream> ...
随机推荐
- OpenGL问题拾遗
1 OpenGL设置好纹理以后显示不出来,显示为黑色 纹理默认会使用 mipmap .如果没有修改filter选项,或没有指定其他level的mipmap数据,就会显示不出来
- java notify和notifyAll的区别
首先从名字可以了解,notify是通知一个线程获取锁,notifyAll是通知所有相关的线程去竞争锁. notify不能保证获得锁的线程,真正需要锁,并且可能产生死锁. 举例1: 所有人(消费者线程) ...
- Thinking in Java——笔记(8)
Polymorphism The polymorphic method call allows one type to express its distinction from another, si ...
- zepto源码--核心方法10(位置)--学习笔记
今天基本上就是zepto学习笔记的最后一篇了,介绍一下有关位置的函数,position, offset, scrollLeft, scrollTop scrollLeft 如果所选取的包装集不存在,则 ...
- ERROR 2006 (HY000) at line xx: MySQL server has gone away 解决方法
- 【译】使用UIKit进行面向对象的编程
在WWDC 2015上,Apple谈了Swift中面向协议编程的话题,令人深思.在那之后,好像每个人都在讨论关于协议扩展的话题,这个新的语言特性使每个人都有所困惑. 我阅读了许多关于Swift中协议的 ...
- MVC控制器获取@Html.DropDownList值
MVC控制器获取@Html.DropDownList值 发表于 2014 年 4 月 1 日 作者 efour — 暂无评论 先贴一段代码,演示@Html.DropDownList的使用. 前台 前台 ...
- hdu 1175冒牌连连看
#include <bits/stdc++.h> using namespace std; const int N = 1005; int arr[N][N]; int vis[N][N] ...
- windows系统调用 semaphore信号量
#include "iostream" #include "windows.h" #include "cstring" using name ...
- 获取访问者ip的方法
package com.mi.util; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.S ...