Source

bzoj3441

Hint

请先思考后再展开

按被删除的顺序考虑每个点,然后按照题意模拟

Solution

请先思考后再展开

被删除的顺序一定是按照【能被操作的次数】为第一关键字,位置作为第二关键字
然后你维护当前轮数和当前走到什么位置(我存了具体位置,其实应该存排名更好写……)
用个树状数组资瓷排名和位置之间的转化即可
时间复杂度为 $O(nlogn)$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include<ctime>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<map>
#include<set>
#include<queue>
#include<deque>
#include<stack>
#include<bitset>
#include<vector>
#include<algorithm>
#include<iostream>
#include<deque>
using namespace std;
namespace mine
{
typedef long long ll;
#define double long double
const int INF=0x3f3f3f3f;
ll ()
{
ll ans=0;char c=getchar();int f=1;
while(c<'0' or c>'9') {if(c=='-') f=-1;c=getchar();}
while('0'<=c and c<='9') ans=ans*10+c-'0',c=getchar();
return ans*f;
}
void write(ll num)
{
if(num<0) {num=-num;putchar('-');}
if(num>9) write(num/10);
大专栏  【bzoj3441】乌鸦喝水div class="line"> putchar('0'+num%10);
}
void writeln(int num){write(num);puts("");}
#define FR first
#define SE second
#define MP make_pair
#define pr pair<ll,ll>
#define PB push_back
inline void chmax(ll &x,ll y) {x=x>y?x:y;}
inline void chmin(ll &x,ll y) {x=x<y?x:y;}
const int MAX_N=1e5+10;
int bin[30];
struct BIT
{
int bit[MAX_N];BIT(){memset(bit,0,sizeof bit);}
int lowbit(int x) {return x&-x;}
void add(int x,int c) {while(x<MAX_N) bit[x]+=c,x+=lowbit(x);}
int ask(int x) {int ans=0;while(x>=1) ans+=bit[x],x-=lowbit(x);return ans;}
int findk(int k)
{
int ans=0;
for(int i=20;i>=0;i--) if(ans+bin[i]<MAX_N and k>=bit[ans+bin[i]]) k-=bit[ans+bin[i]],ans+=bin[i];
return ans;
}
}bit;
pr a[MAX_N];
void main()
{
bin[0]=1;for(int i=1;i<30;i++) bin[i]=bin[i-1]<<1;
int n,m,all;scanf("%d%d%d",&n,&m,&all);
for(int i=1;i<=n;i++) a[i].FR=all-qread()+1;
for(int i=1;i<=n;i++) a[i].FR=ceil((double)a[i].FR/qread()),a[i].SE=i,bit.add(i,1);
sort(a+1,a+n+1);
ll ans=0,dec=0;int turn=1,pos=1;//pos=应从哪里开始
for(int i=1;i<=n and turn<=m;i++)
{
int rk=bit.ask(pos);
ll tmp=a[i].FR-dec;int me=bit.ask(a[i].SE);
if(tmp>0)
{
int rk2=(tmp+rk-1)%(n-i+1),t2=(tmp+rk-1)/(n-i+1);
if(rk2==0) rk2=n-i+1,t2--;
if(turn+t2>m) {ans+=ll(m-turn)*(n-i+1)+(n-i+1-rk+1);break;}
turn+=t2;dec+=tmp;ans+=tmp;
if((me==n-i+1 and rk2==n-i) or rk2==n-i+1) rk2=1,turn++;
else if(rk2<me) rk2++;
bit.add(a[i].SE,-1);
pos=bit.findk(rk2);
}
else
{
if(rk>me) rk--;
if(rk==n-i+1) rk=1,turn++;
bit.add(a[i].SE,-1);
pos=bit.findk(rk);
}
}
printf("%lld",ans);
}
};
int main()
{
srand(time(0));
mine::main();
}

【bzoj3441】乌鸦喝水的更多相关文章

  1. Bzoj3441 乌鸦喝水

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

  2. [BZOJ 3441]乌鸦喝水

    3441: 乌鸦喝水 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 374  Solved: 148[Submit][Status][Discuss] ...

  3. BZOJ:3441 乌鸦喝水

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

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

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

  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. Djang_框架

  2. MongoDB 索引 .explain("executionStats")

    MongoDB干货系列2-MongoDB执行计划分析详解(3) http://www.mongoing.com/eshu_explain3 MongoDB之使用explain和hint性能分析和优化 ...

  3. Git-GitHub-GitLab三者之间的联系及区别

    在讲区别以及联系之前先简要的介绍一下,这三者都是什么(本篇文章适合刚入门的新手,大佬请出门左转) 1.什么是 Git? Git 是一个版本控制系统. 版本控制是一种用于记录一个或多个文件内容变化,方便 ...

  4. Multiple alleles|an intuitive argument|

    I.5 Multiple alleles. 由两个等位基因拓展到多个等位基因,可以得到更多种二倍体基因型: 所以单个等位基因的概率(用i代指某个基因,pi*是该基因的频率)是(以计数的方法表示) 所以 ...

  5. java threadlocal 背景 本质

    背景 JAVA中有全局变量(静态变量,不论在哪个函数 都能访问).局部变量(函数中定义的变量,在栈中,只能在本函数内访问),主要这2种类型. threadlocal变量 是一种线程级全局的变量(普通的 ...

  6. C++各种模板

    高精度: 重载运算符版: #include<cstdio> #include<cstring> #include<algorithm> using namespac ...

  7. iOS分段选择器、旅行App、标度尺、对对碰小游戏、自定义相册等源码

    iOS精选源码 企业级开源项目,模仿艺龙旅行App 标签选择器--LeeTagView CSSegmentedControl常用的分段选择器,简单易用! 仿微信左滑删除 IOS左滑返回 输入框 iOS ...

  8. PyTorch基础——使用神经网络识别文字中的情感信息

    一.介绍 知识点 使用 Python 从网络上爬取信息的基本方法 处理语料"洗数据"的基本方法 词袋模型搭建方法 简单 RNN 的搭建方法 简单 LSTM 的搭建方法 二.从网络中 ...

  9. 吴裕雄--天生自然 JAVA开发学习:文档注释

    /*** 这个类绘制一个条形图 * @author runoob * @version 1.2 */ import java.io.*; /** * 这个类演示了文档注释 * @author Ayan ...

  10. 浅谈PHP小马免杀

    在渗透测试过程初期,上传小马,拿到 webshell 再进行下一步的操作,现如今的网站安全更多是 一些云防护.CDN防护.服务器安全软件等等,给渗透测试.提权等带来了一定难度的提升, 今天探讨一下如何 ...