3441: 乌鸦喝水

Time Limit: 20 Sec  Memory Limit: 128 MB
Submit: 374  Solved: 148
[Submit][Status][Discuss]

Description

【题目背景】
    一只乌鸦在自娱自乐,它在面前放了n个有魔力的水缸,水缸里装有无限的水。
【题目描述】
    他准备从第1个水缸飞到第n个水缸,共m次。在飞过一个水缸的过程中,如果他能够得着水缸里的水,即水缸口到水面距离小于等于乌鸦能够得着的深度,那它就会喝水缸里的水。每喝一次水,所有水缸里的水位都会下降,第i个水缸里的水位会下降Ai,注意喝水是瞬间的,如果乌鸦刚好够得着,但喝完之后够不着,也视为喝到一次,水位也会相应的下降。

Input

共有3行。第一行有三个正整数n、m和x,用空格隔开。n表示水缸的数量,m表示乌鸦飞的次数,x表示乌鸦能够得着的深度。第二行,有n个用空格隔开的正整数,第i个数为第i个水缸中水缸口到水面的距离Wi。第三行,有n个用空格隔开的正整数,第i个为Ai。

Output

只有一行,这一行只有一个正整数,为这只乌鸦能喝到水的次数。

Sample Input

5 2 20
15 14 13 12 12
1 1 1 1 1

Sample Output

9
【数据范围】
100%的数据,0<n≤100000,0<m≤100000,0<x≤2000000000,0<Wi≤2000000000,0<Ai≤200。

HINT

2016.7.8重设时限,未重测!

Source

题解

首先计算出每个水缸里的水能喝几次, 然后推出一个结论: 水少的水缸如果喝了 $n$ 次, 则水比它多的水缸也至少喝了 $n$ 次.

继续推还可以推出: 如果某一轮从某个水缸一直到结尾还能喝 $k$ 次, 而且该还能喝的次数 $\geq k$ , 则水比该水缸多的水缸不会在本轮被喝完.

然后我们就可以把水缸按照还可以喝的次数升序排序, 树状数组维护查询某水缸到结尾还能喝几次, 贪心处理即可

参考代码

GitHub

 #include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm> const int MAXN=1e6+; int n;
int m;
int x;
int r;
int ans;
int cnt;
int last;
int c[MAXN]; std::pair<int,int> a[MAXN]; int Query(int);
int LowBit(int);
void Add(int,int);
void Initialize();
int BinarySearch(int); int main(){
Initialize();
for(int i=;i<=cnt;i++){
if(a[i].first<ans){
Add(a[i].second,-);
}
else{
int tmp=Query(cnt)-Query(last);
while(r<m&&ans+tmp<=a[i].first){
r++;
ans+=tmp;
last=;
tmp=Query(cnt)-Query(last);
}
if(r>=m)
break;
int pos=BinarySearch(a[i].first-ans);
ans=a[i].first;
last=pos;
Add(a[i].second,-);
}
}
printf("%d\n",ans);
return ;
} int BinarySearch(int x){
int ans=last,l=last,r=cnt;
while(l<=r){
int mid=(l+r)>>;
if(Query(mid)-Query(last)<=x){
ans=mid;
l=mid+;
}
else
r=mid-;
}
return ans;
} void Initialize(){
int tmp;
scanf("%d%d%d",&n,&m,&x);
for(int i=;i<=n;i++){
scanf("%d",&a[i].first);
a[i].second=i;
}
for(int i=;i<=n;i++){
scanf("%d",&tmp);
a[i].first=(x-a[i].first)/tmp+;
}
for(int i=;i<=n;i++){
if(a[i].first!=){
a[++cnt]=a[i];
Add(a[i].second,);
}
}
std::sort(a+,a++cnt);
} void Add(int i,int x){
while(i<=n){
c[i]+=x;
i+=LowBit(i);
}
} int Query(int x){
int ans=;
while(x>){
ans+=c[x];
x-=LowBit(x);
}
return ans;
} inline int LowBit(int x){
return x&-x;
}

Backup

[BZOJ 3441]乌鸦喝水的更多相关文章

  1. BZOJ:3441 乌鸦喝水

    bzoj:3441 乌鸦喝水 题目传送门 Description 一只乌鸦在自娱自乐,它在面前放了n个有魔力的水缸,水缸里装有无限的水. 他准备从第1个水缸飞到第n个水缸,共m次.在飞过一个水缸的过程 ...

  2. Bzoj3441 乌鸦喝水

    Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 258  Solved: 97 Description [题目背景]     一只乌鸦在自娱自乐,它在面 ...

  3. 8.18 NOIP模拟测试25(B) 字符串+乌鸦喝水+所驼门王的宝藏

    T1 字符串 卡特兰数 设1为向(1,1)走,0为向(1,-1)走,限制就是不能超过$y=0$这条线,题意转化为从(0,0)出发,走到(n+m,n-m)且不越过$y=0$,然后就裸的卡特兰数,$ans ...

  4. 【bzoj3441】乌鸦喝水

    Source bzoj3441 Hint 请先思考后再展开 按被删除的顺序考虑每个点,然后按照题意模拟 Solution 请先思考后再展开 被删除的顺序一定是按照[能被操作的次数]为第一关键字,位置作 ...

  5. 「模拟8.18」字符串(卡特兰数)·乌鸦喝水(树状数组,二分)·所驼门王的宝藏(tarjan,拓扑)

    最近好颓啊,所以啥都做不出来 简单说一下这次考试,分机房了,还分不同考卷,果然我还是留在二机房的蒟蒻, 大概也只有这样的简单题,才能勉强水个rank 3吧........ 其实不必管在哪个机房,努力便 ...

  6. NOIP模拟测试25「字符串·乌鸦喝水·所陀门王的宝藏(陀螺王)」

    字符串 题解 没看出catalan怎么办 dp打表啊! 考虑大力dp拿到30分好成绩!顺便收获一张表 打表发现$C_{n+m}^{m}-C_{n+m}^{m-1}$ 仔细观察然后发现其实就是之前的网格 ...

  7. Beta Round #9 (酱油杯noi考后欢乐赛)乌鸦喝水

    题目:http://www.contesthunter.org/contest/Beta%20Round%20%EF%BC%839%20%28%E9%85%B1%E6%B2%B9%E6%9D%AFno ...

  8. FZYZOJ-1569 喝水

    P1569 -- 喝水 时间限制:2000MS      内存限制:131072KB 状态:Accepted      标签:    无   无   无 Description GH的N个妹子要喝水, ...

  9. 推荐一款健康App 多喝水,引领全民时尚喝水生活习惯

    推荐一款健康App 多喝水,引领全民时尚喝水生活习惯 1 介绍 多喝水,一款鼓励大众喝水的APP.我们倡导大众健康生活,培养人们爱喝水的习惯,让每一次喝水,都能产生价值,让人们在喝水的同时,可享受赚钱 ...

随机推荐

  1. C#删除只读文件

    File.SetAttributes(fileRealPath, FileAttributes.Normal);//先将文件设置成普通属性 //...你的删除文件的代码

  2. IDEA 启动项目,tomcat中配置的虚拟路径无法使用

    有时候,使用idea启动项目,非动静分离项目,直接根据图片url地址显示图片,会发现图片无法显示,tomcat中配置的虚拟路径无法使用,这时候需要配置idea.选择路径,然后给与一个访问名就行了.

  3. 微软URLRewriter.dll的url重写的简单使用

    1.先下载MSDNURLRewriting.zip包,打开代码生成URLRewriter.dll文件: 2.将URLRewriter.dll文件引用到项目中: 3.在web.config文件中  &l ...

  4. wpf 子窗体调用主窗体中函数的实现

    子窗体(Win_Set): MainWindow m;                m = (MainWindow)this.Owner;                m.showText(&qu ...

  5. Emacs快速入门

    Emacs 快速入门 Emacs 启动: 直接打emacs, 如果有X-windows就会开视窗. 如果不想用X 的版本, 就用 emacs -nw (No windows)起动. 符号说明 C-X ...

  6. 记一次C#面试

    最近参加了工作后的第一次面试,虽然最终没谈成,但是收获还是不少,不管是技术还是面试经验还是得多多积累呀. 这一次面试与在学校时候参加过的面试区别还是挺大的.校园招聘的面试问的问题似乎都比较具体,直接针 ...

  7. MySQL安装再折腾--编码的设置

    一.MySQL的安装 从官网(https://dev.mysql.com/downloads/mysql/)中下载Mac OS X 10.12 (x86, 64-bit), DMG Archive(m ...

  8. 初学Node.js

    下载Node.js,官方网址:https://nodejs.org/en/download/ 可根据根据自己的电脑配置来下载相当于的Node.js 下载完成后使用Windows键+R 输入cmd 输入 ...

  9. Lucas定理及扩展

    Lucas定理 不会证明... 若\(p\)为质数 则\(C(n, m)\equiv C(n/p, m/p)*C(n\%p, m\%p)(mod\ p)\) 扩展 求 \(C(n,m)\) 模 \(M ...

  10. webapi views目录下html文件无法访问

    找到views下web.config 增加如下红色标注内容 <?xml version="1.0"?> <configuration> <config ...