【ARC072E】Alice in linear land
瑟瑟发抖,这竟然只是个蓝题
题意大概就是初始在\(0\),要到坐标为\(D\)的地方去,有\(n\)条指令,第\(i\)条为\(d_i\)。当收到一条指令\(x\)后,如果向\(D\)方向走\(x\)后距离\(D\)更近,那么就走;否则就停留在原地。
现在有\(Q\)次询问,第\(i\)次询问为\(q_i\),问能不能仅改变\(d_{q_i}\),使得其不能到达\(D\)点
考虑一个暴力,设\(g_{i,j}\)表示当\(D=j\)时,只使用后\(i\)次操作能否到达\(j\)点
考虑如何求出\(g_{i,j}\)
转移大概长这样
g_{i+1,j-d_i} & d_i\leq j\\
g_{i+1,d_i-j} & j<d_i<2j\\
g_{i+1,j}&d_i\geq 2j
\end{matrix}\right.
\]
就是当\(d_i\leq j\)的时候,只能到达距离目标\(j-d_i\)的地方
当\(j<d_i<2j\),我们会走过\(j\)点,到达距离目标\(d_i-j\)的地方,这个时候翻转一下正方向即可
当\(d_i>2j\)的时候,显然走过去的点距离目标更远,于是直接不走
我们再处理出一个数组\(pos_i\)表示第\(i\)次操作后距离\(D\)点的距离
当遇到一个询问\(q_i\)的时候,如果我们要改变\(d_{q_i}\),那么可能我们只能改变为\(0\)到\(2\times pos_{i-1}\)的数,只有这些才是有效移动
进行有效移动后距离目标点的距离也只可能从\(pos_{i-1}\)到\(0\),所以只需要\(g_{q_i+1,0}\)到\(g_{q_i+1,pos_{i-1}}\)里有一个是\(0\),那么我们就可以走这个距离,之后就不可能走到目标点了
这样复杂度是\(O(nD)\)的,显然过不了
考虑一下如何不求\(g\)数组,而直接高效询问
发现我们一次询问只关注\(g_{q_i+1}\)的前\(pos_{i-1}\)项有没有一个\(0\),显然一个靠前的\(0\)能影响更多的询问
所以我们如果知道使得\(g_{i,j}=0\)最小的\(j\)在哪里,也能快速回答询问
设\(dp_i\)表示使得\(g_{i,j}=0\)最小的\(j\),考虑求出\(dp\)数组
根据上面\(g\)数组的转移,尝试反推\(dp\)数组的转移
当\(d_i\geq 2\times dp_{i+1}\)时,\(dp_{i}=dp_{i+1}\)。这对应了上面的第三个转移
当\(dp_{i+1}=d_i-j\),即\(dp_{i}=d_i-dp_{i+1}\)时,需要满足\(d_i-dp_{i+1}<d_i<2(d_i-dp_{i+1})\),即\(d_i>2\times dp_{i+1}\)时。这对应了第二个转移。
当\(dp_{i+1}=j-d_i\),即\(dp_i=dp_{i+1}+d_i\)时,需要满足\(d_i\leq dp_{i+1}+d_i\),这显然成立。这对应了上面第三个转移。
根据条件取上面三个转移的最小值即可,回答询问的时候只需要判断一下\(dp_{q_i+1}\)和\(pos_{q_{i-1}}\)的大小关系即可
代码
#include<bits/stdc++.h>
#define re register
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
inline int read() {
char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
const int maxn=5e5+5;
int d[maxn],dp[maxn],pos[maxn];
int n,D,Q;
inline int ABS(int x) {return x>=0?x:-x;}
int main() {
n=read();D=read();dp[n+1]=1;
for(re int i=1;i<=n;i++) d[i]=read();
for(re int i=n;i;--i) {
if(d[i]>=2*dp[i+1]) {
dp[i]=dp[i+1];
if(d[i]>2*dp[i+1]) dp[i]=min(dp[i],d[i]-dp[i+1]);
}
else dp[i]=dp[i+1]+d[i];
}
pos[0]=D;
for(re int i=1;i<=n;i++) pos[i]=min(ABS(pos[i-1]-d[i]),pos[i-1]);
Q=read();int x;
while(Q--) x=read(),puts(dp[x+1]<=pos[x-1]?"YES":"NO");
return 0;
}
【ARC072E】Alice in linear land的更多相关文章
- 【ARC072E】Alice in linear land DP
题目大意 有一个人要去直线上\(lm\)远处的地方,他会依次给他的机器发出\(n\)个指令.第\(i\)个指令为\(d_i\).他的机器收到一个指令\(x\)后,如果向目的地方向前进\(xm\)后比当 ...
- 【ARC072 E】Alice in linear land
被智商题劝退,告辞 题意 有一个人在一条数轴的距离原点为 \(D\) 的位置,他可以执行 \(n\) 次操作,每次操作为给定一个整数 \(d_i\),这个人向原点的方向走 \(d_i\) 个单位,但如 ...
- 【BZOJ3291】Alice与能源计划 二分图最大匹配
[BZOJ3291]Alice与能源计划 Description 在梦境中,Alice来到了火星.不知为何,转眼间Alice被任命为火星能源部长,并立刻面临着一个严峻的考验. 为了方便,我们可以将火星 ...
- 【线性代数】1-1:线性组合(Linear Combinations)
title: [线性代数]1-1:线性组合(Linear Combinations) toc: true categories: Mathematic Linear Algebra date: 201 ...
- 【arc072e】AtCoder Regular Contest 072 E - Alice in linear land
题意 给定一个D,以及一个长度为N的序列a,顺序执行这些数字: 对于一个数字x,会使得D=min(D,abs(D-x)) 有Q次询问,每次询问独立,给出i,能否修改a[i],使得D最后不为0. n,q ...
- ARC072E Alice in linear land
---题面--- 题解: 首先我们要观察到一个性质,因为在固定的起始距离下,经过固定的操作,最后所在的位置是固定的,我们设经过操作1 ~ i之后所在的地方距离终点为d[i]. 那么如果女巫可以修改第i ...
- 【XSY2190】Alice and Bob VI 树形DP 树剖
题目描述 Alice和Bob正在一棵树上玩游戏.这棵树有\(n\)个结点,编号由\(1\)到\(n\).他们一共玩\(q\)盘游戏. 在第\(i\)局游戏中,Alice从结点\(a_i\)出发,Bob ...
- 【bzoj4730】 Alice和Bob又在玩游戏
http://www.lydsy.com/JudgeOnline/problem.php?id=4730 (题目链接) 题意 给出一个森林,两个人轮流操作,每次把一个节点以及它的祖先全部抹去,无节点可 ...
- 【bzoj3291】Alice与能源计划 模拟费用流+二分图最大匹配
题目描述 在梦境中,Alice来到了火星.不知为何,转眼间Alice被任命为火星能源部长,并立刻面临着一个严峻的考验. 为了方便,我们可以将火星抽象成平面,并建立平面直角坐标系.火星上一共有N个居民点 ...
随机推荐
- 工具类--MD5Utils
public class MD5Utils { private static final String[] HEX_DIGITS = { "0", "1", & ...
- python之lambda,random,timeit,collections,
python之lambda,random,timeit,collections,一. python之lambda函数lambda函数又称为匿名函数,匿名函数就是没有函数名的函数.>>> ...
- Linux下使用java获取cpu、内存使用率
原文地址:http://www.voidcn.com/article/p-yehrvmep-uo.html 思路如下:Linux系统中可以用top命令查看进程使用CPU和内存情况,通过Runtime类 ...
- Quartus II 使用 modelsim 仿真
转自:http://www.cnblogs.com/emouse/archive/2012/07/08/2581223.html Quartus 中调用modelsim的流程 1. 设定仿真工具 as ...
- PostgreSQL——服务器基本设置与操作
一.编译安装: 环境准备: GNU make 版本 >=3.8 (make --version) ISO/ANSI C 编译器,至少須兼容 C89 标准,GCC 或 intel 編译器等均可 g ...
- Linux环境变量永久设置方法(zsh)
1.之前一直使用:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./home/46005/cuda-9.0/lib64/来设置cuda库路径变量 -----临时的,当 ...
- python初学者学习工具安装教程&安装步骤详解
一.python安装: 版本:3.6.8 下载地址:https://www.python.org/downloads/ 安装步骤截图: 1.点击python安装包,出现下图所示界面,注意勾选A ...
- HttpURLConnection模拟登录学校的正方教务系统
教务系统登录界面 如图1-1 1-1 F12-->network查看登录教务系统需要参数: __VIEWSTAT txtUserName TextBox2 txtSecretCode Radio ...
- WdatePicker设置时间与倒计时
之前苦于jQuery的datetimepicker插件不知道如何设置秒数,用了同学推荐的WdatePicker,真心好用. 相关文档用法可以上http://www.my97.net/dp/index. ...
- pandas--层次化索引
层次化索引是pandas的一项重要功能,它使你能在一个轴上拥有多个(两个以上)索引级别. 创建一个Series,并用一个由列表或数组组成的列表作为索引. data=Series(np.random.r ...