【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个居民点 ...
随机推荐
- python正则re
import reline = "Catsaresmarterthandogs"matchObj = re.match( r'(.*)are(\w{2})(.*)', line, ...
- 机器学习基石笔记:Homework #4 Regularization&Validation相关习题
原文地址:https://www.jianshu.com/p/3f7d4aa6a7cf 问题描述 程序实现 # coding: utf-8 import numpy as np import math ...
- Feign 系列(01)最简使用姿态
目录 Feign 系列(01)最简使用姿态 1. 引入 maven 依赖 2. 基本用法 3. Feign 声明式注解 Feign 系列(01)最简使用姿态 Spring Cloud 系列目录(htt ...
- linux内核编译时如何根据spec指定编译包
问题: 1> rpmbuild -bb SPECS/kernel.spec --define="_topdir `pwd`" 编译 出的包并未包含kernel-firmwar ...
- 真实的『REM』手机屏幕适配
rem 作为一个低调的长度单位,由于手机端网页的兴起,在屏幕适配中得到重用.使用 rem 前端开发者可以很方便的在各种屏幕尺寸下,通过等比缩放的方式达到设计图要求的效果. rem 的官方定义『The ...
- html5语义化标签大全
常见的语义化标签有 <article>.<section>.<nav>.<aside>.<header>.<footer> 详细 ...
- UNLISTEN - 停止监听通知信息
SYNOPSIS UNLISTEN { name | * } DESCRIPTION 描述 UNLISTEN 用于删除一个现有的已注册的 NOTIFY 事件. UNLISTEN 取消当前 Postgr ...
- Mariadb 10.2.8版本GTID主从环境搭建以及切换
1.首先搭建主从 主环境:192.168.1.117 从环境:192.168.1.123 a.首先以二进制包的形式安装好MariaDB (忽略不计) b.配置环境的变量 通配 [mysqld] bin ...
- vue中axios的封装以及简单使用
一.axios的封装 在vue中为了使用axios使用方便,不需要每一个模块进行导入,就需要对其进行封装: 1.新建http.js模块 import axios from 'axios' // 设置基 ...
- docker gitlab backup
说明:下面命令中带有<your container name>字,是 gitlab 容器的名称,请按实际情况进行代替 在创建备份之前,你不需要停止任何东西 docker exec -t & ...