[AGC012E]Camel and Oases
题意:有$n$个数轴上的绿洲,给定它们的坐标,有一只骆驼想要访问所有绿洲,当它的驼峰容量为$V$时,它可以走到和当前绿洲距离$\leq V$的绿洲,并可以继续走,它也可以用一次跳跃到达任意一个绿洲,只不过这样会让驼峰容量变为$\left\lfloor\frac V2\right\rfloor$,问它可以从哪些位置开始使得最终可以到达所有绿洲
当$V$为定值时,它不跳跃就能到达的地方是许多个区间,每个区间内相邻两点距离$\leq V$,先对所有的$O(\log V)$个$V$预处理出这些区间,我们把$V'=\left\lfloor\frac V{2^i}\right\rfloor$时的这些区间称为第$i$层的区间
问题变为:硬点$0$层选一个区间,在$0$层以外每层选一个区间,使得这些区间的并是$[1,n]$,问是否可行
考虑状压,设$fl_i=x$表示在$i$状态的层中选了区间,最远能覆盖到$[1,x]$,转移就枚举不在$i$中的层$j$,加入$j$层中包含$fl_i$的右端点最大的区间即可,类似地定义$fr_i$,转移也是类似的,注意这里的状压不包括$0$层
最后对$0$层的每一个区间$[l,r]$,如果存在$x$使得$fl_x\geq l-1,fr_{all-x}\leq r+1$那么整个区间都可以,直接枚举所有$x$给区间打标记即可
状压DP那一步好厉害啊...
#include<stdio.h>
void fmax(int&a,int b){
if(b>a)a=b;
}
void fmin(int&a,int b){
if(b<a)a=b;
}
int x[200010],l[20][200010],r[20][200010],n;
void pre(int p,int d){
int*l=::l[p],*r=::r[p],i;
l[1]=1;
for(i=2;i<=n;i++)l[i]=x[i]-x[i-1]>d?i:l[i-1];
r[n]=n;
for(i=n-1;i>0;i--)r[i]=x[i+1]-x[i]>d?i:r[i+1];
l[0]=1;
r[n+1]=n;
}
int fl[262144],fr[262144],s[200010];
void gao(int l,int r){
if(l<=r){
s[l]++;
s[r+1]--;
}
}
int main(){
int V,M,i,j;
scanf("%d%d",&n,&V);
for(i=1;i<=n;i++)scanf("%d",x+i);
for(M=0;V;V>>=1)pre(M++,V);
pre(M,0);
fr[0]=n+1;
for(i=1;i<1<<M;i++){
fr[i]=n;
for(j=0;j<M;j++){
if(i>>j&1){
fmax(fl[i],r[j+1][fl[i^(1<<j)]+1]);
fmin(fr[i],l[j+1][fr[i^(1<<j)]-1]);
}
}
}
for(i=0;i<1<<M;i++){
gao(l[0][fr[((1<<M)-1)^i]-1],r[0][fl[i]+1]);
}
for(i=1;i<=n;i++){
s[i]+=s[i-1];
puts(s[i]?"Possible":"Impossible");
}
}
[AGC012E]Camel and Oases的更多相关文章
- AGC012 - E: Camel and Oases
原题链接 题意简述 沙漠中有个排成一条直线的绿洲,一头储水量为的骆驼. 骆驼有两个操作: 走到距离在V以内的一个绿洲. 飞到任意一个绿洲,但V减少一半.V=0时不能飞. 问骆驼依次从每个绿洲出发,能否 ...
- 【AGC012E】 Camel and Oases ST表+状压dp
题目大意:一排点,两点间有距离. 初始你有一个行走值$v$,如果相邻两点距离不超过$v$你可以自由在这两点行走. 当$v$大于$0$时,你可以选择某一时刻突然飞到任意点,这样做后$v$会减半(下取整) ...
- 【agc012E】Camel and Oases
Portal --> agc012 Description 有一排点,两点间有一定距离,初始的时候有一个行走值\(v\),如果说两点间距离不超过\(v\),那么可以在这两点间自由行走,如果当前\ ...
- 【AtCoder】【模拟】【模型转化】Camel and Oases(AGC012)
题意: 有一个骆驼,n个绿洲遍布在数轴上,第i个绿洲的坐标为x[i],保证x[i]单增.骆驼的驼峰有体积初始值V.当驼峰的体积变为v的时候,驼峰中至多只能够存储v L的水.骆驼希望走完所有的绿洲,并且 ...
- Agc012_E Camel and Oases
传送门 题目大意 坐标轴上有$n$个坐标,第$i$个坐标是$x_i$,初始你有一个容量$V$,当两个给定的坐标距离不超过$V$时,你可以从一个坐标到达另一个坐标,同时你还可以令$V=\lfloor \ ...
- AtCoder Grand Contest 012
AtCoder Grand Contest 012 A - AtCoder Group Contest 翻译 有\(3n\)个人,每一个人有一个强大值(看我的假翻译),每三个人可以分成一组,一组的强大 ...
- 【AtCoder】AGC012
AGC012 A - AtCoder Group Contest 从最后开始间隔着取就行 #include <bits/stdc++.h> #define fi first #define ...
- A♂G&C012
A♂G&C012 A AtCoder Group Contest 从大到小sort后输出\(a_2+a_4+a_6+\ldots a_{2n}\) 好♂啊,只会背结论/kk B Splatte ...
- Camel运行原理分析
Camel运行原理分析 以一个简单的例子说明一下camel的运行原理,例子本身很简单,目的就是将一个目录下的文件搬运到另一个文件夹,处理器只是将文件(限于文本文件)的内容打印到控制台,首先代码如下: ...
随机推荐
- flask函数已定义参数却出现takes 0 positional arguments but 1 was given的问题
在flask中定义了一个简单的删除数据库内容的路由 测试却发现一直报错 说delete_history函数定义时没有接受参数,但是检查delete_history函数却发现没有问题 后来想了半天才发现 ...
- Android Studio 中引入Library
启动AndroidStudio后,打开你需要接收Library的项目.比如有两个项目,项目A,和Library项目B,那么打开项目A.图中所示为项目的结构图,点击右上角的File菜单. 2 在下拉菜单 ...
- python调参神器hyperopt
一.安装 pip install hyperopt 二.说明 Hyperopt提供了一个优化接口,这个接口接受一个评估函数和参数空间,能计算出参数空间内的一个点的损失函数值.用户还要指定空间内参数的分 ...
- Python第三方库wordcloud(词云)快速入门与进阶
前言: 笔主开发环境:Python3+Windows 推荐初学者使用Anaconda来搭建Python环境,这样很方便而且能提高学习速度与效率. 简介: wordcloud是Python中的一个小巧的 ...
- CTSC/APIO2018 帝都一周游
day0 报道 上午早早就起来了,两点才到酒店,然后去简单试了试机子. 不得不说今年八十中的伙食变得瓜皮了啊,去年还是大叠的5元卷,今年变成了单张的*餐卷.不知道食堂吝啬什么,面条米饭都只有一点点,还 ...
- 采用dlopen、dlsym、dlclose加载动态链接库【转】
转自:http://www.cnblogs.com/Anker/p/3746802.html 1.前言 为了使程序方便扩展,具备通用性,可以采用插件形式.采用异步事件驱动模型,保证主程序逻辑不变,将各 ...
- Leetcode 之Length of Last Word(38)
做法很巧妙.分成左右两个对应的部分,遇到左半部分则入栈,遇到右半部分则判断对应的左半部分是否在栈顶.注意最后要判断堆栈是否为空. bool isValid(const string& s) { ...
- python_day1学习笔记
一.Python 2.7.x 和 3.x 版本的区别小结 print函数 1.python2 import platform print ‘Python’, platform.python_versi ...
- linux命令(37):locate命令
1.命令格式: Locate [选择参数] [样式] 2.命令功能: locate命令可以在搜寻数据库时快速找到档案,数据库由updatedb程序来更新,updatedb是由cron daemon周期 ...
- Python 分页功能
自定义分页组件 """ 自定义分页组件的使用方法: pager_obj = Pagination(request.GET.get('page',1),len(HOST_L ...