HDU-5336 XYZ and Drops 模拟十滴水

“事件”模拟,建立以时间为key的优先队列
摘要由CSDN通过智能技术生成

题意:给出r*c区域,每滴水的位置和初始容量,一开始在某点爆开一滴水,向四个方向发射一个容量为1的小水滴,其他水滴能接受这滴水并增加容量1,容量大于4时爆裂,重复上述过程,问时间t后每滴水的状态。

范围:水滴不超过100,时间不超过10000

思路一:模拟每滴水滴爆裂后的小水滴,模拟每个时刻棋盘上的状态,复杂度超过400W。(样例数有100,不太好,很容易超时)

思路二:建立以时间为key的优先队列,用 “事件” 发生的早晚来模拟求得此刻状态,可知每一滴小水滴最多发生100个事件,故而队列中最多20000个事件,复杂度log(2W)*2W. (15ms秒过)


题意二:题解中提出,n可达到10的5次,t可达到10的9次,r,c小于等于10的5次 , 其他如上。

思路:类似思路二,建立十字链表或者10W个map之类的模拟棋盘,每一滴小水滴不再是扫描整行或整列来加入事件,而是得到最近的四个方向的大水滴,则枚举到此事件时有2种情况:①大水滴被其他水滴消灭,则此小水滴继续推一格,(在棋盘中可能对应很多格),此事件弹出,(若有下一格)重新计算时间构成新事件加入队列 ②大水滴还在,加入大水滴即可,此事件弹出。  可知,队列中最多有10W*2个事件同时存在,每个时刻必定有一个或多个大水滴消灭,同一时刻的事件发生数量应该不多,设其均摊到每个水滴为K,则时间复杂度为 l

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值