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\)和 ...
随机推荐
- cost加上了
- http性能测试点滴
WeTest 导读 在服务上线之前,性能测试必不可少.本文主要介绍性能测试的流程,需要关注的指标,性能测试工具apache bench的使用,以及常见的坑. 什么是性能测试 性能测试是通过自动化的测试 ...
- 敏捷开发学习笔记-Agile development(AM)
以人为核心,迭代,循序渐进 项目被切分为多个子项目,每个子项目都经过测试,具备集成和可运行的特征 5个价值观:沟通.简单.反馈.勇气.谦逊 敏捷模型与瀑布模型的区别 相对于瀑布模型,提高开发效率和 ...
- 软件测试工程师必备的SQL语句基础
为一个软件测试工程师,我们在测试过程中往往需要对数据库数据进行操作,但是我们的操作大多以查询居多,有时会涉及到新增,修改,删除等操作,所以我们其实并不需要对数据库的操作有特别深入的了解,以下是我在工作 ...
- 游戏AI之群组行为
群组行为指的是多个对象组队同时进行的情况.每个boid需满足分离,队列,凝聚三个基本的规则. 分离:群组中的每个个体都与相邻的个体保持一定的距离. 队列:群组以相同的速度,向相同的方向移动. 凝聚:与 ...
- 【system.array】使用说明
对象:system.array 说明:提供一系列针对数组类型的操作 目录: 方法 返回 说明 system.array.join( array, separator ) [String] 将数组转换 ...
- python 终极篇 --- form组件 与 modelForm
form组件 ...
- lintcode671 循环单词
循环单词 The words are same rotate words if rotate the word to the right by loop, and get another. Cou ...
- 【C#】ArcFace2 视频人脸比对教程
请允许我大言不惭,叫做教程,特希望各位能指正.哦,我用的是vs2017.了解更多详情可以访问虹软人工智能开放平台 一.准备工作 1.创建项目 2.添加EMGU.CV包 ,并设属性“复制到输出目录”为“ ...
- 你真的了解JAVA里的String么
Java中String类细节问题 (考察点Java内存分配问题) 1. String str1 = "abc"; System.out.println(str1 == &quo ...