ARC072E Alice in linear land
题解:
首先我们要观察到一个性质,因为在固定的起始距离下,经过固定的操作,最后所在的位置是固定的,我们设经过操作1 ~ i之后所在的地方距离终点为d[i].
那么如果女巫可以修改第i个操作,那么就相当于已经经过了1 ~ i - 1的操作,所以这个时候Alice已经在d[i - 1]的位置了,那么这个时候女巫可以通过修改s[i]来使得Alice和终点的距离减小,因为如果一个s[i]可以使得距离缩小,那么Alice一定会走,因此Alice的下一位置将是[0, d[i - 1]]中的任意位置。
我们设f[i]表示最小的起始距离x使得经过i ~ n的操作无法到达终点。
那么显然如果f[i + 1] <= d[i - 1],女巫就一定可以使得Alice无法到达终点。
因此考虑如何转移。
首先f[n + 1]表示不经过任何操作,那么这个时候的最小距离显然是1.
考虑加入一个操作s[i]。
1,如果当前在f[i + 1] 并且 s[i]这个操作不会被执行,那么s[i]就不会对f[i]造成影响,所以最近的距离还是f[i + 1]。
那么什么时候s[i]不会被执行?显然s[i]需要 >= f[i + 1]并使得s[i] - f[i + 1] >= f[i + 1],移项得到f[i + 1] <= s[i] / 2.
2,如果这个操作被执行,那么将会缩短与目的地的距离,因为经过f[i + 1]的操作,最小的无法到达目的地的距离为f[i + 1],
而原本在f[i + 1]的Alice经过s[i]这个操作缩短了与目的地的距离后,距离已经小于f[i + 1]了,因此这个时候肯定是可以到达目的地了。
而为了使f[i]尽可能小,所以肯定要使得f[i]经过操作s[i]后到达f[i + 1],因为f[i + 1]是经过操作i + 1 ~ n最小的无法到达目的地的距离,不能再更小了。
因此f[i] = f[i + 1] + s[i].
#include<bits/stdc++.h>
using namespace std;
#define R register int
#define AC 501000
#define LL long long int n, m;
int s[AC], d[AC], f[AC]; inline int read()
{
int x = ;char c = getchar();
while(c > '' || c < '') c = getchar();
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x;
} void pre()
{
n = read(), d[] = read();
for(R i = ; i <= n; i ++)
{
s[i] = read(), d[i] = d[i - ];
if(d[i] >= s[i]) d[i] -= s[i];
else if(s[i] - d[i] < d[i]) d[i] = s[i] - d[i];
}
} void work()//f[i]表示经过操作i ~ n,使得Alice无法到达终点的最小起始距离x
{
f[n + ] = ;
for(R i = n; i; i --)
if(f[i + ] <= s[i] / ) f[i] = f[i + ];
else f[i] = f[i + ] + s[i];
m = read();
for(R i = ; i <= m; i ++)
{
int x = read();
if(d[x - ] >= f[x + ]) printf("YES\n");
else printf("NO\n");
}
} int main()
{
freopen("in.in", "r", stdin);
pre();
work();
fclose(stdin);
return ;
}
ARC072E Alice in linear land的更多相关文章
- 【ARC072E】Alice in linear land DP
题目大意 有一个人要去直线上\(lm\)远处的地方,他会依次给他的机器发出\(n\)个指令.第\(i\)个指令为\(d_i\).他的机器收到一个指令\(x\)后,如果向目的地方向前进\(xm\)后比当 ...
- 【ARC072E】Alice in linear land
题目 瑟瑟发抖,这竟然只是个蓝题 题意大概就是初始在\(0\),要到坐标为\(D\)的地方去,有\(n\)条指令,第\(i\)条为\(d_i\).当收到一条指令\(x\)后,如果向\(D\)方向走\( ...
- 【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 ...
- [AT2401] [arc072_e] Alice in linear land
题目链接 AtCoder:https://arc072.contest.atcoder.jp/tasks/arc072_c 洛谷:https://www.luogu.org/problemnew/sh ...
- AtCoder Regular Contest 072 E:Alice in linear land
题目传送门:https://arc072.contest.atcoder.jp/tasks/arc072_c 题目翻译 给你一个数组\(D\),然后给你一个操作序列\(d\),每次操作可以将\(D\) ...
- 【ARC072 E】Alice in linear land
被智商题劝退,告辞 题意 有一个人在一条数轴的距离原点为 \(D\) 的位置,他可以执行 \(n\) 次操作,每次操作为给定一个整数 \(d_i\),这个人向原点的方向走 \(d_i\) 个单位,但如 ...
- Atcoder Regular Contest 072 C - Alice in linear land(思维题)
Atcoder 题面传送门 & 洛谷题面传送门 首先求出 \(s_i\) 表示经过 \(i\) 次操作后机器人会位于什么位置,显然 \(s_0=D\),\(s_i=\min(s_{i-1},| ...
- AT2401 [ARC072C] Alice in linear land
基于观察,可以发现这样一条性质: 我们并不关心当前位置和终点的绝对关系,只在乎当前位置和终点的距离,当这个距离确定的时候接下来能走到的位置也是确定的. 基于这个观察可以发现,本质上每个位置的状态就是和 ...
- AtCoder刷题记录
构造题都是神仙题 /kk ARC066C Addition and Subtraction Hard 首先要发现两个性质: 加号右边不会有括号:显然,有括号也可以被删去,答案不变. \(op_i\)和 ...
随机推荐
- springBoot -webSocket 基于STOMP协议交互
浅谈WebSocket WebSocket是在HTML5基础上单个TCP连接上进行全双工通讯的协议,只要浏览器和服务器进行一次握手,就可以建立一条快速通道,两者就可以实现数据互传了.说白了,就是打破了 ...
- React中类定义组件constructor 和super
刚开始学习React没多久,在老师的教程里看到了类组件的使用示例,但是和资料上有些冲突,而引发了一些疑问: 类组件中到底要不要定义构造函数constructor()? super()里边到底要不要传入 ...
- 了解Python控制流语句——break 语句
这篇文章主要介绍了详解Python中break语句的用法,是Python入门的呼出知识,需要的朋友可以参考下,python基础系列教程之-Python break语句 跳出循环 break 语句用以中 ...
- 使用es6总结笔记
1. let.const 和 block 作用域 在ES6以前,var关键字声明变量.无论声明在何处,都会被视为声明在函数的最顶部(不在函数内即在全局作用域的最顶部). let 关键词声明的变量不具备 ...
- Ubuntu14.04下部署FastDFS 5.08+Nginx 1.9.14
最新的版本可以在这里获取,目前下载的最新版本是5.08,更新于2016-02-03.在这里可以找到更多的说明. 下载好后,server端分为两个部分,一个是tracker,一个是storage.顾 ...
- node包管理相关
切换npm数据源 镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在): 1.通过config命令 npm config set registry https ...
- Java异常(Exception)
Java异常:运行期出现的错误 1. Java异常是Java提供的用于处理程序中错误的一种机制: 2. 错误指的是程序运行期间发生的异常事件,如除零溢出.数组下标越界.读取的文件不存在.... 3. ...
- LintCode-35.翻转链表
翻转链表 翻转一个链表 样例 给出一个链表 1->2->3->null ,这个翻转后的链表为 3->2->1->null 挑战 在原地一次翻转完成 标签 链表 优步 ...
- Kprobe
linux内核源码Documentation目录下存在kprobe介绍文档如下 Kprobes allows multiple probes at the same address. Current ...
- Python的7种性能测试工具:timeit、profile、cProfile、line_profiler、memory_profiler、PyCharm图形化性能测试工具、objgraph
1.timeit: >>> import timeit >>> def fun(): ): a = i * i >>> timeit.timeit ...