zoukankan      html  css  js  c++  java
  • AT2401 [ARC072C] Alice in linear land 题解

    ATCoder
    Luogu

    Description.

    机器人从 \(0\) 出发向 \(D\) 走。
    \(n\) 个指令形如 \(a_i\),让他向 \(D\)\(a_i\) 个单位。
    机器人很贪心,如果走过去到 \(D\) 的距离更远它会拒绝执行这个指令。
    每次你可以修改指令 \(i\),问能否让机器人到不了 \(D\)

    Solution.

    首先从前往后,我们可以 \(O(1)\) 知道当前的位置。
    我们每次修改,只可能减少当前的值,所以我们需要求出最小的通过后面结束可以不为 \(0\) 的点。
    考虑从后往前递推,设 \(i+1\) 的答案是 \(x\)
    那如果 \(|x-a_i|<x\),即 \(\frac {a_i}2< x\le a_i\),那肯定有当前答案为 \(x+a_i\)
    否则当前答案就是 \(x\)

    Coding.

    点击查看代码
    //是啊……你就是那只鬼了……所以被你碰到以后,就轮到我变成鬼了{{{
    #include<bits/stdc++.h>
    using namespace std;typedef long long ll;
    template<typename T>inline void read(T &x)
    {
    	x=0;char c=getchar(),f=0;
    	for(;c<'0'||c>'9';c=getchar()) if(c=='-') f=1;
    	for(;c>='0'&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48);
    	if(f) x=-x;
    }
    template<typename T,typename...L>inline void read(T &x,L&...l) {read(x),read(l...);}//}}}
    const int N=500005;int n,D,m,d[N],w[N],z[N];
    int main()
    {
    	read(n,D),w[0]=D,z[n+1]=1;for(int i=1;i<=n;i++) read(d[i]);
    	for(int i=1;i<=n;i++) w[i]=min(w[i-1],abs(w[i-1]-d[i]));
    	for(int i=n;i>=1;i--) z[i]=(z[i+1]<=d[i]/2?z[i+1]:z[i+1]+d[i]);
    	read(m);for(int i=1,x;i<=m;i++) read(x),puts(w[x-1]>=z[x+1]?"YES":"NO");
    	return 0;
    }
    
  • 相关阅读:
    递归回溯 UVa140 Bandwidth宽带
    嵌入式设备网络设置
    海思板卡SATA最佳读写块大小测试
    Linux日志轮循实现(shell)
    检测应用的内存泄漏情况(shell)
    Python的交叉编译移植至arm板
    写一个简单的配置文件和日志管理(shell)
    shell 实现主板测试
    主板硬件性能测试
    C语言 模2除法
  • 原文地址:https://www.cnblogs.com/pealfrog/p/15466075.html
Copyright © 2011-2022 走看看