洛谷 P2570 [ZJOI2010]贪吃的老鼠


题目

题目描述

奶酪店里最近出现了m只老鼠!它们的目标就是把生产出来的所有奶酪都吃掉。奶酪店中一天会生产n块奶酪,其中第i块的大小为pi,会在第ri秒被生产出来,并且必须在第di秒之前将它吃掉。第j只老鼠吃奶酪的速度为sj,因此如果它单独吃完第i快奶酪所需的时间为pi/sj。老鼠们吃奶酪的习惯很独特,具体来说:

(1) 在任一时刻,一只老鼠最多可以吃一块奶酪;

(2) 在任一时刻,一块奶酪最多被一只老鼠吃。

由于奶酪的保质期常常很短,为了将它们全部吃掉,老鼠们需要使用一种神奇的魔法来延长奶酪的保质期。将奶酪的保质期延长T秒是指所有的奶酪的di变成di+T。同时,使用魔法的代价很高,因此老鼠们希望找到最小的T使得可以吃掉所有的奶酪。

输入输出格式

输入格式:
输入文件的第一行包含一个整数K,表示输入文件中数据的组数。

每组数据的第一行包含两个整数n和m,分别表示奶酪和老鼠的数量。接下来的n行每行包含三个整数pi,ri,di。最后m行每行包含一个整数,表示sj。pi,ri,di,sj的含义如上文所述。

输出格式:
包含K 行,每行包含一个实数,表示你找到的最小的T。你的答案和标准答案的绝对误差不应超过10−4。

输入输出样例

输入样例#1:

2
2 2
13 0 4
10 1 3
4
2
1 1
1 0 2
1

输出样例#1:

0.5
0

说明

样例说明

第一组数据中:

 第0到第1秒:第一只老鼠吃第一块奶酪;

 第1到第3.5秒:

第一只老鼠吃第二块奶酪;

第二只老鼠吃第一块奶酪;
 第3.5到第4.5秒:第一只老鼠吃第一块奶酪。

数据规模

30%的数据中,1≤n,m≤5;

100%的数据中,1≤K≤5,1≤n,m≤30,1≤pi≤10^5, 0 ≤ri

题解

(标签:二分答案+网络流)[应该是正解吧……洛谷上的题解就是这个……]

[先说明下,怕各位看到错误想法后开始往错误的方法上想……,总之,我已经石乐志了]

先贴一个想法吧,,不知道对不对……(要回寝室睡觉了…..代码星期三贴)(想法错了请dalao说明,谢谢)

二分答案+贪心

二分答案就不解释了

贪心:先按生产出来的时间顺序排序,用当前空闲且恰好能在规定的时间内吃完奶酪的老鼠来吃奶酪,并且记录它吃完该奶酪的时间,如果出现当前没有能在规定时间内吃完奶酪的老鼠,那么就用当前速度最大的老鼠,吃的时候如果有某只速度快于它的老鼠吃完某块奶酪,那么就换老鼠,在该只老鼠吃的时候继续更新直到用一只速度尽量小的老鼠吃完这块奶酪,如果依然无法吃完,则说明该延长时间不可行

以上是原来的思路……(经过一天的思考,我有了更进(shí)一(lè)步(zhì)的想法……)

二分我还是不说……

首先,按完成时间的顺序对奶酪排一边序(每次二分答案不需要更新,且保证最应该先完成的奶酪能够先完成)顺序按时间轴排序对时间进行排序(t每更改一次就需要重新更新右边界的位置),然后用双向链表维护时间轴(因为,在吃奶酪的过程中,老鼠并不会全部都恰好在右边界时吃掉奶酪),然后就是在双向链表的基础上过一边时间轴,对于每一个时间点,先做完该时间点与上一个时间点之间的各奶酪的余量,然后,如果在该时间点与下一个时间点中有老鼠吃完奶酪,就需要记录下来并且ret–(当ret==0时就可以return true了),按时间先后分别加入双向链表(未能在该段时间中吃完的奶酪,完成时间依然是原来的右边界),然后,为下一个时间段重新做一遍奶酪与老鼠的分配(尽量用速度小且能吃完奶酪的老鼠,否则就用当前速度最快的老鼠),如果到了某一个奶酪的右边界时间点而奶酪还没吃完,则说明该二分的答案不可行

自己吐槽一句:我可能真的是石乐志了......

更改一下:在中途如果有老鼠吃完奶酪,改时间的时候只需更新最先吃完的那个奶酪以及时间点,其他的不需要更改,因为在做先吃完的奶酪的那个时间点时会重新对剩余的点进行一次更新

洛谷 P2570 [ZJOI2010]贪吃的老鼠相关推荐

  1. 洛谷$P2570\ [ZJOI2010]$贪吃的老鼠 网络流+二分

    正解:网络流+二分 解题报告: 传送门$QwQ$ 和上一题有点儿像,,,?$QwQ$但是比上一题要有趣很多$QwQ$ 首先把大致思路捋下?依然是.二分出每个奶酪的开始和结束时间,然后check下最大流 ...

  2. Luogu P2570 [ZJOI2010]贪吃的老鼠

    Luogu P2570 [ZJOI2010]贪吃的老鼠 题目描述 奶酪店里最近出现了\(m\)只老鼠!它们的目标就是把生产出来的所有奶酪都吃掉.奶酪店中一天会生产\(n\)块奶酪,其中第\(i\)块的 ...

  3. P2570 [ZJOI2010]贪吃的老鼠

    传送门 →_→唯一一篇能看得懂的题解---->这里 很容易想到二分+网络流,然而并没有什么卵用--出题人的思路太神了-- 首先考虑如果一块奶酪在同一时间可以被多只老鼠吃的话,该如何建图.首先不难 ...

  4. [ZJOI2010]贪吃的老鼠

    P2570 [ZJOI2010]贪吃的老鼠 在Ta的博客查看 显然二分,最大流判定 要满足两个条件: (1) 在任一时刻,一只老鼠最多可以吃一块奶酪: (2) 在任一时刻,一块奶酪最多被一只老鼠吃. ...

  5. [ZJOI2010] 贪吃的老鼠(二分+差分+神仙建图网络流)

    problem luogu-P2570 solution 卧槽网络流尼玛神题 首先这个最小延长时间 TTT ,套路地考虑二分,将问题转化为判定性问题. 其次 n,mn,mn,m 和奶酪存在时间 [l, ...

  6. 【网络流】LGP2570 [ZJOI2010]贪吃的老鼠

    [题目] 原题地址 原题说的很清楚了,在这里也贴出来吧. 奶酪店里最近出现了m只老鼠!它们的目标就是把生产出来的所有奶酪都吃掉.奶酪店中一天会生产n块奶酪,其中第i块的大小为pi,会在第ri秒被生产出 ...

  7. 洛谷P2606 [ZJOI2010]排列计数(数位dp)

    题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic的,答案可能很 ...

  8. ●洛谷P2606 [ZJOI2010]排列计数

    题链: https://www.luogu.org/problemnew/show/P2606 题解: 组合数(DP),Lucas定理 首先应该容易看出,这个排列其实是一个小顶堆. 然后我们可以考虑d ...

  9. 洛谷 P1433 吃奶酪

    这一题用到了状态压缩.然后接下来可以用 dp 或 dfs. 一开始我用的是 dp,不会,然后看题解,dp 写完感觉脑子糊糊的,于是打算写写 dfs. dfs 优化后还是 WA 了一个点,然后又跑去看大 ...

最新文章

  1. AngularJs 键盘事件和鼠标事件
  2. 关于VS2017 添加 EF的MVC控制器报错的解决方法
  3. 普通爬虫有啥意思,我写了个通用Scrapy爬虫
  4. define、const、typedef区别
  5. C语言 memcpy和memcpy_s区别 - C语言零基础入门教程
  6. U-Net++粗略解释
  7. Python 调试:pdb
  8. Linux内核分析 - 网络[三]:从netif_receive_skb()说起
  9. 为了搞懂什么是区块链,我都快抑郁了(转)
  10. 华为亮相英国首次 5G 直播;百度 AI 接入医院信息系统;小米成立质量办公室 | 极客头条...
  11. 什么是Mac地址?什么是交换机? 涉及单工,半双工,双工模式
  12. 三菱q系列plc连接电脑步骤_SERVER和三菱Q系列PLC通讯设置步骤
  13. 数学中 对数log 指数
  14. 数据拟合之Excel篇
  15. Emacs基础使用教程及常见命令整理
  16. 高新科技企业税收优惠有多少
  17. java 并发(并发工具包)
  18. HttpClient访问https,设置忽略SSL证书验证
  19. python长什么样子图片_怎么样提升python图片文字识别精度,有什么库或是方法吗?...
  20. ubuntu 12.04 用后感

热门文章

  1. 富士施乐Fuji Xerox ApeosPort-V 4020 驱动
  2. matlab三相电路基波图形,毕业设计基于matlab的三相交流调压电路的设计与仿真.doc...
  3. 从学渣到创办95亿独角兽企业,饿了么张旭豪是怎么做到的
  4. mvp实现Xrecyclerview的上下拉和购物车功能(仿饿了么)
  5. vue.js毕业设计,基于vue.js前后端分离电影院售票小程序系统 开题报告
  6. 水下清淤机器人_水下清淤机器人的制作方法
  7. 百度的改版引发的思考
  8. ABBYY Screenshot Reader对系统的相关要求
  9. 【Docker 运维】Docker迁移至新磁盘
  10. 发段完美国际注入跑路call 全部原代码