hdu 5336 XYZ and Drops
暴力模拟每个水滴和小水滴的状态即可,复杂度O(n*T)。
(大家可以想一下1<= r <= 100000,1 <= c <= 100000, 1<= n <= 100000, 1<= T <= 1000000000的时候怎么做)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#include <algorithm>
using namespace std;const int maxn=110;
struct node
{int x,y,val,t;
}no[maxn];
struct water
{int x,y,t,id,dir;water(){}water(int _x,int _y,int _t,int _id,int _dir):x(_x),y(_y),t(_t),id(_id),dir(_dir){}bool operator < (const water &a) const{return t > a.t;}
};int r,c,n,T;
int vis[maxn][maxn];void solve(int x,int y,priority_queue<water> &q,int t)
{int tmp = x;vis[x][y] = -1;while(tmp>0 && vis[tmp][y]==-1)tmp--;q.push(water(tmp,y,t+x-tmp,tmp==0?-1:vis[tmp][y],1));tmp = x;while(tmp<=r && vis[tmp][y]==-1)tmp++;q.push(water(tmp,y,t+tmp-x,tmp>r?-1:vis[tmp][y],2));tmp = y;while(tmp>0 && vis[x][tmp]==-1)tmp--;q.push(water(x,tmp,t+y-tmp,tmp==0?-1:vis[x][tmp],3));tmp = y;while(tmp<=c && vis[x][tmp]==-1)tmp++;q.push(water(x,tmp,t+tmp-y,tmp>c?-1:vis[x][tmp],4));
}
void bfs(int x,int y)
{priority_queue<water> q;solve(x,y,q,0);while(!q.empty()){water u = q.top();q.pop();if(u.id == -1)continue;if(u.t > T)continue;if(no[u.id].val <= 4 && vis[u.x][u.y] != -1){no[u.id].t = u.t;no[u.id].val++;if(no[u.id].val>4)solve(no[u.id].x,no[u.id].y,q,u.t);}else if(no[u.id].val>4 && no[u.id].t<u.t){int x = u.x,y = u.y;int tmp,t = u.t;if(u.dir == 1){tmp = x;while(tmp>0 && vis[tmp][y]==-1)tmp--;if(tmp > 0)q.push(water(tmp,y,t+x-tmp,vis[tmp][y],1));}else if(u.dir == 2){tmp = x;while(tmp<=r && vis[tmp][y]==-1)tmp++;if(tmp <= r)q.push(water(tmp,y,t+tmp-x,vis[tmp][y],2));}else if(u.dir == 3){tmp = y;while(tmp>0 && vis[x][tmp]==-1)tmp--;if(tmp > 0)q.push(water(x,tmp,t+y-tmp,vis[x][tmp],3));}else{tmp = y;while(tmp<=c && vis[x][tmp]==-1)tmp++;if(tmp <= c)q.push(water(x,tmp,t+tmp-y,vis[x][tmp],4));}}}
}int main()
{while(scanf("%d%d%d%d",&r,&c,&n,&T)!=EOF){memset(vis,-1,sizeof(vis));for(int i = 1;i <= n; i++){scanf("%d%d%d",&no[i].x,&no[i].y,&no[i].val);vis[no[i].x][no[i].y] = i;}int x,y;scanf("%d%d",&x,&y);bfs(x,y);for(int i = 1; i <= n; i++){if(no[i].val > 4)printf("0 %d\n",no[i].t);elseprintf("1 %d\n",no[i].val);}}return 0;
}
hdu 5336 XYZ and Drops相关推荐
- HDU 5336 XYZ and Drops(模拟十滴水游戏 BFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5336 Problem Description XYZ is playing an interestin ...
- 模拟-HDOJ-5336-XYZ and Drops
XYZ and Drops Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- HDU 4389 - X mod f(x)
题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4389 2012多校,第9场,1010 . 问题是,询问区间内 存在多少个 哈沙德数(Harshad ...
- hdu 4389 囧,打表
http://acm.hdu.edu.cn/showproblem.php?pid=4389 题意 :一个数能被他各个位数之和整除则符合要求,给L,R,问区间里有多少个数符合要求. 囧,居然打表就能过 ...
- HDU——1106排序(istringstream的使用、STLvector练习)
排序 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- hdu 5438 Ponds 拓扑排序
Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...
- HDU 1248 寒冰王座(全然背包:入门题)
HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...
- hdu 1312 Red and Black 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 第二条深搜,题目并不难,但是做了我好久好久,由于一个细节,让我赌上了一个晚上的时间. 题目大意: ...
- HDU 1429 胜利大逃亡(续) (BFS+位压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) ...
- hdu 1272 小希的迷宫
Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该 ...
最新文章
- 《Two Dozen Short Lessons in Haskell》学习(八)- Function Types, Classes, and Polymorphism
- java语言显示运算时间_JAVA语言之ACM日期计算:输入一个日期,格式如:2010 10 24 ,判断这一天是这一年中的第几天...
- 利用GPU实现无尽草地的实时渲染
- 使用docker-compose部署sentinel
- 2017北理c语言答案,c语言答案 北理工
- python与sap_Python结合SAP GUI Script操作sap的简易教程
- 基于express和vue框架的校园商品交易平台 答辩PPT免费下载
- 数据库实验2:数据库的建立与维护
- CopyQq program山寨QQ项目
- 如何使用File APIs来读取文件
- 内网穿透NPS及NPC搭建(使用docker实现)
- 夏普PC_1500计算机使用,夏普PC-1500袖珍计算机的检修(续)
- div 空隙的解决办法
- 小白教你把数字翻译成字符串
- oracle 列转行
- 66.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:删除字符串中所有的*号。在编写函数时,不得使用C语言提供的字符串函数。
- java 上位机 socket_通讯编程上位机软件实现(SOCKET)——第二回
- 【2021年蓝桥杯Java-B组国赛题解】
- android adb 抓取log
- VC++各种文件作用