[BZOJ3441] 乌鸦喝水
正解复杂度 $ O(n*log2(n)) $,然而我打的是 $ O(n*log2(n)*log2(n)) $的。
50分暴力:
$ O(n*m) $暴力模拟喝水过程,不再赘述。
100分算法:
这中多过程题其实有个套路就是每次找出最先使状态变化的时刻,对于这个题来说就是找出那一个最先被喝到不能喝。
考虑用线段树维护(S-w[i])/a[i]+1即能喝的最多次数,这样就可以每次 $ O(1) $查出来啦。
设x为最小的次数,那么我们便可以先在 $ O(1) $的复杂度内把x的整圈转出来,代码实现如下:
m-=x/t[1].sum; ans+=x/t[1].sum*t[1].sum; x%=t[1].sum;
之后二分查找它的结束位置(因为中间有可能有不能再喝的)
L=pos+1,R=n; while(L<R) {int mid=(L+R)>>1;if(query(1,pos+1,mid)>=x) R=mid;else L=mid+1; }
(本算法的复杂度瓶颈就是这里)
但是我们发现,有可能根本没有用完所有的喝水次数,所以要再来一圈:
if(!pos) m--;if(x){L=1,R=n;while(L<R){int mid=(L+R)>>1;if(query(1,pos+1,mid)>=x) R=mid;else L=mid+1;}ans+=query(1,1,L);pos=L%n;}
注意这里m--的条件并不是x还有剩余,而是pos到了0(否则就可以得到WA80的好成绩。。。)
Dele(1,t[1].pos);
最后把这个水瓶删除即可。
关于循环外:
if(m) {ans+=t[1].sum*(m-1);for(int i=pos+1;i<=n;i++){if(S>=w[i]+a[i]*ans) ans++;} }
因为有可能下一个水瓶用完是在m轮之后,所以要把m轮转完
最后就可以AC本题啦!在OJ上跑了3000ms(three_D大神跑了400ms)
转载于:https://www.cnblogs.com/AthosD/articles/11373466.html
[BZOJ3441] 乌鸦喝水相关推荐
- Bzoj3441 乌鸦喝水
Time Limit: 20 Sec Memory Limit: 128 MB Submit: 258 Solved: 97 Description [题目背景] 一只乌鸦在自娱自乐,它在面前放了 ...
- [BZOJ3441]乌鸦喝水
题目链接:BZOJ3441 分析 1. 乍一看, O(NM) O(NM)的暴力模拟,超时. 2. 首先,预处理出每个水缸够喝多少次,然后按照次数从小到大排序. 3. 设 cnt cnt为喝了多少次, ...
- bzoj3441: 乌鸦喝水
前言 今天早上贼颓.. 显示去poj看错了一题,然后poj还炸裂了评测不了.. 然后做这题又看错了,想了半天.. 然后想出一点点东西的时候发现看错题了QAQ 于是一早上就荒废了.. 感觉这是退役的节奏 ...
- NOIP模拟测试25「字符串·乌鸦喝水·所陀门王的宝藏(陀螺王)」
字符串 题解 没看出catalan怎么办 dp打表啊! 考虑大力dp拿到30分好成绩!顺便收获一张表 打表发现$C_{n+m}^{m}-C_{n+m}^{m-1}$ 仔细观察然后发现其实就是之前的网格 ...
- 8.18 NOIP模拟测试25(B) 字符串+乌鸦喝水+所驼门王的宝藏
T1 字符串 卡特兰数 设1为向(1,1)走,0为向(1,-1)走,限制就是不能超过$y=0$这条线,题意转化为从(0,0)出发,走到(n+m,n-m)且不越过$y=0$,然后就裸的卡特兰数,$ans ...
- bzoj 3441: 乌鸦喝水(说实话有生之年没有见过这么难的模拟)
3441: 乌鸦喝水 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 311 Solved: 117 [Submit][Status][Discus ...
- BZOJ:3441 乌鸦喝水
bzoj:3441 乌鸦喝水 题目传送门 Description 一只乌鸦在自娱自乐,它在面前放了n个有魔力的水缸,水缸里装有无限的水. 他准备从第1个水缸飞到第n个水缸,共m次.在飞过一个水缸的过程 ...
- 乌鸦喝水(异常处理版 _)
由于都没有人发 索性便发出来吧..不过UT没写好 >_< [要求] 改写乌鸦喝水案例,扩展场景:乌鸦面对一堆大小不一的石头,且其中可能有伪装成石头的小炸药丸,面对的瓶子可能是普通的瓶子,也 ...
- 心田花开:一年级语文《乌鸦喝水》教案解析及练习题
小学阶段是语文学习的起步阶段,掌握所学的基础知识是非常必要的.心田花开分享了<乌鸦喝水>知识点,希望能帮助大家更好的复习所学的知识. [原文]乌鸦喝水 一只乌鸦口渴了,到处找水喝.乌鸦看见 ...
最新文章
- Python的range()函数
- Git学习笔记07-删除文件
- mysql执行计划_mysql的sql执行计划详解
- 02_pandas获取数据(指定列获取、[]方式获取、loc函数,at函数, iloc函数 iat函数)
- shouldParkAfterFailedAcquire
- SAP Spartacus的b2cLayoutConfig
- Spring第三篇【Core模块之对象依赖】
- linux的文件系统架构
- 关于Apache与Nginx的优势比较
- ubuntu 在线安装最新交叉编译工具
- 网络舆情分析系统具体使用功能及作用详解
- vs2013+opencv3.4.3配置安装教程
- 关于全站仪自建坐标系知识梳理
- 电脑A和电脑B建立通信,这就是网络。IO、中断、缓冲区这都不是研究网络时该关心的事
- 电磁波是如何产生的以及分类
- 能完成么?马斯克推特宣称特斯拉今年将生产约50万辆电动汽车
- Fiddler抓包Android手机https、http教程
- 数字孪生应用白皮书_赛迪数字孪生白皮书(2019)
- Mac设置屏保后,显示屏保没有立即锁屏
- One Piece 海贼王动漫壁纸 Python 爬取!