题目大意:数轴上有n个不同的点,你有一个能量,初始是v。可以进行两种操作,走到左边/右边一个点,如果当前能量大于等于距离。或者随意跳到一个点,但是要求能量不是0并且能量要减半(向下取整)。对每个点求从这个点出发能否到达所有点。一个点可以经过多次。n,v≤2×105,∣xi∣≤109n,v\le2\times10^5,|x_i|\le10^9n,v≤2×105,∣xi​∣≤109
题解:
首先v只会减半logv次就拜拜了。
考虑一开始在一个点,你能到达一个区间。
然后你需要把哪些减半后的v用于走左边,剩下的走右边。
直接枚举子集就死了,转为求如果想要从1走到i,最小能从多小的j出发走到n。处理LF[S]表示S这个集合的v最远能从1走到那里,RF同理,然后就做完了。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;inline int inn() { int x;scanf("%d",&x);return x; }const int N=270000,LOG=20;int x[N],v[N],L[LOG][N],R[LOG][N],val[N],Lf[N],Rf[N];
int main()
{int n=inn(),k=0;v[0]=inn();rep(i,1,n) x[i]=inn();while(v[k]) v[k+1]=v[k]>>1,k++;int all=(1<<k)-1;rep(i,0,k){L[i][1]=1;for(int j=1+1;j<=n;j++) if(x[j]-x[j-1]<=v[i]) L[i][j]=L[i][j-1];else L[i][j]=j;R[i][n]=n;for(int j=n-1;j>=0;j--) if(x[j+1]-x[j]<=v[i]) R[i][j]=R[i][j+1];else R[i][j]=j;}rep(i,1,all) Lf[i]=1,Rf[i]=n;Lf[0]=0,Rf[0]=n+1;rep(i,0,all) rep(j,1,k) if(!((i>>(j-1))&1)) Lf[i|(1<<(j-1))]=max(Lf[i|(1<<(j-1))],R[j][Lf[i]+1]),Rf[i|(1<<(j-1))]=min(Rf[i|(1<<(j-1))],L[j][Rf[i]-1]);rep(i,0,n+1) val[i]=n+n;rep(i,0,all) val[Lf[i]]=min(val[Lf[i]],Rf[all^i]);for(int i=n;i>=0;i--) val[i]=min(val[i],val[i+1]);rep(i,1,n) printf(val[L[0][i]-1]<=R[0][i]+1?"Possible\n":"Impossible\n");return 0;
}

AGC 012 E Camel and Oases - 状压dp相关推荐

  1. AtCoder Grand Contest 012 E Camel and Oases 状压dp

    Description 有一个容量为V的包,n个接水点,坐标分别为x[] 有两种移动方式: 若两个接水点之间的距离不超过此时包的容量v,那么就可以移动 若此时v不等于0,那么可以使v=v/2(下取整) ...

  2. AtCoder Grand Contest 012 E - Camel and Oases 状压dp

    题意 平面上有n个点.初始有V的权值,每次可以从一个点走到与他距离不超过V的点,当V>0时也可以让V/2且到达任意一个点.问从每个点出发能否遍历所有点. n,V<=200000 分析 显然 ...

  3. 【AGC012E】 Camel and Oases ST表+状压dp

    题目大意:一排点,两点间有距离. 初始你有一个行走值$v$,如果相邻两点距离不超过$v$你可以自由在这两点行走.  当$v$大于$0$时,你可以选择某一时刻突然飞到任意点,这样做后$v$会减半(下取整 ...

  4. agc012E Camel and Oases(状压dp+思路题)

    这题神啊.状压dp你敢信?思维难度爆表还有一堆细节要注意???orz Visjiao 原题链接:http://agc012.contest.atcoder.jp/tasks/agc012_e 大神题解 ...

  5. POJ 1038 Bugs Integrated Inc (复杂的状压DP)

    \(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...

  6. codeforces 8C. Looking for Order 状压dp

    题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...

  7. UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)

    整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...

  8. POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)

    poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...

  9. 【每日DP】day2、P1879 [USACO06NOV]Corn Fields G玉米地(状压DP模板题)难度⭐⭐⭐★

    昨天的每日DP我还在写01背包,今天就到状压DP了,真刺激. P1879 [USACO06NOV]Corn Fields G 题目链接 输入 2 3 1 1 1 0 1 0 输出 9 一道简单的状压D ...

最新文章

  1. Android学习 —— 数据的存储与访问方式一: 文件存取
  2. Hyper-V 网卡 load failed
  3. CF 1098 C. Construct a tree
  4. Asp.net实现在线截图(大图截取为小图)
  5. python3菜鸟教程-总算理解python3中文入门教程
  6. 前端 CSS层叠性 CSS选择器优先级
  7. Visual Studio 2019连接自动的Sql Server开发版数据库(C#语言)
  8. java 位运算符赋值_java-运算符(算术、赋值 =、关系、逻辑、三元、位运算符)...
  9. 英雄联盟更新后服务器还在维护吗,英雄联盟今天维护到什么时候结束 11月12日停机更新维护公告...
  10. Android NDK调试出错Unknown Application ABI, Unable to detect application ABI#39;s的解决方式...
  11. 5月第二周全球五大顶级域名总量新增10.5万个
  12. wordpress发送测试邮件
  13. orcl数据库先决条件检查时失败
  14. oracle数据库建语句吗,Oracle建表语句是什么_数据库
  15. Socket网络编程
  16. 企业网的规划与设计(eNSP)
  17. 职场沟通10个小技巧 让你迅速融入团队
  18. windows 运行 自定义 命令 的实现
  19. Android展开的TextView和点击底部滚动到顶部
  20. 摘要-The Inventor Mentor

热门文章

  1. 嘉楠科技任命成进为首席财务官:高管变动频繁,多名核心股东减持
  2. 搜索引擎:Elasticsearch、Solr、Lucene
  3. 蓝桥杯打卡 报时助手
  4. 苹果x来电闪光灯怎么设置_手机上使用的记事备忘便签软件怎么设置来电提醒功能?...
  5. celery beat一直不触发任务(卡在Writing entries...)
  6. 涨姿势了,蜻蜓FM源码剖析
  7. Win10安装程序提示“不能打开要写入的文件xxxxx”如何解决
  8. Unity 播放声音
  9. rust前哨站_rust - diesel 1 的安装与使用 (连接数据库,读取)
  10. android 强制打开gps定位_Android判断GPS是否开启和强制帮用户打开GPS