暴力模拟每个水滴和小水滴的状态即可,复杂度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相关推荐

  1. HDU 5336 XYZ and Drops(模拟十滴水游戏 BFS)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5336 Problem Description XYZ is playing an interestin ...

  2. 模拟-HDOJ-5336-XYZ and Drops

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

  3. HDU 4389 - X mod f(x)

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4389 2012多校,第9场,1010 . 问题是,询问区间内 存在多少个 哈沙德数(Harshad ...

  4. hdu 4389 囧,打表

    http://acm.hdu.edu.cn/showproblem.php?pid=4389 题意 :一个数能被他各个位数之和整除则符合要求,给L,R,问区间里有多少个数符合要求. 囧,居然打表就能过 ...

  5. HDU——1106排序(istringstream的使用、STLvector练习)

    排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  6. hdu 5438 Ponds 拓扑排序

    Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...

  7. HDU 1248 寒冰王座(全然背包:入门题)

    HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...

  8. hdu 1312 Red and Black 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 第二条深搜,题目并不难,但是做了我好久好久,由于一个细节,让我赌上了一个晚上的时间. 题目大意: ...

  9. HDU 1429 胜利大逃亡(续) (BFS+位压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)  ...

  10. hdu 1272 小希的迷宫

    Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该 ...

最新文章

  1. 《Two Dozen Short Lessons in Haskell》学习(八)- Function Types, Classes, and Polymorphism
  2. java语言显示运算时间_JAVA语言之ACM日期计算:输入一个日期,格式如:2010 10 24 ,判断这一天是这一年中的第几天...
  3. 利用GPU实现无尽草地的实时渲染
  4. 使用docker-compose部署sentinel
  5. 2017北理c语言答案,c语言答案 北理工
  6. python与sap_Python结合SAP GUI Script操作sap的简易教程
  7. 基于express和vue框架的校园商品交易平台 答辩PPT免费下载
  8. 数据库实验2:数据库的建立与维护
  9. CopyQq program山寨QQ项目
  10. 如何使用File APIs来读取文件
  11. 内网穿透NPS及NPC搭建(使用docker实现)
  12. 夏普PC_1500计算机使用,夏普PC-1500袖珍计算机的检修(续)
  13. div 空隙的解决办法
  14. 小白教你把数字翻译成字符串
  15. oracle 列转行
  16. 66.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:删除字符串中所有的*号。在编写函数时,不得使用C语言提供的字符串函数。
  17. java 上位机 socket_通讯编程上位机软件实现(SOCKET)——第二回
  18. 【2021年蓝桥杯Java-B组国赛题解】
  19. android adb 抓取log
  20. VC++各种文件作用

热门文章

  1. java BBS论坛
  2. 用Python绘制折线图(下)
  3. 表达式(四则运算)计算的算法代写 essay代写
  4. 亚马逊awsome day_亚马逊Prime Day交易上线时如何获得警报
  5. PTA 乙级 1002 写出这个数 (20 分) C++
  6. 02、PMI点互信息 PPMI(Positive PMI)
  7. 使用python把普通图片生成ico图标
  8. Office小知识(五)——Word中删除分节符而不影响前节页面设置
  9. 联想微型计算机怎么开盖,联想b520一体机拆机图解
  10. Sass系统技术选型笔记(1)OS