【Atcoder】 [ARC149D] Simultaneous Sugoroku

题目链接

Atcoder方向
Luogu方向

题目解法

首先可以观察到一个 s i m p l e simple simple 的性质:两个相反数每次移动到的位置也是相反数
同时因为坐标的范围较小,所以可以考虑维护一部分位置的信息,来推出其他与它对称的点的信息
首先维护 l , r l,r l,r,表示当前只维护 l − r l-r lr 的信息,同时维护 p o s pos pos 表示当前原点所在位置
考虑把位置的移动变成原点的移动,这样每个位置与原点的相对位置是不会发生改变的
如果原点在 l , r l,r l,r 之间,需分情况讨论

  1. r − p o s > p o s − l r-pos>pos-l rpos>posl,即在原点右边的部分较大,考虑只维护原点右边的部分,舍弃原点左边的部分,只需要将右边的部分指向左边的部分,表示这两个点对称,答案相反即可
  2. r − p o s < = p o s − l r-pos<=pos-l rpos<=posl,同理

最后考虑 x = p o s x=pos x=pos 的情况,即可以移到原点,只要将与它对称的点都标记可以移到原点即可

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
const int N(1000100);
int n,m,a[N],ed[N],ans[N];
bool vis[N];
int e[N],h[N],ne[N],idx;
inline int read(){int FF=0,RR=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;return FF*RR;
}
void dfs(int u){for(int i=h[u];~i;i=ne[i]){int v=e[i];ans[v]=-ans[u],ed[v]=ed[u];dfs(v);}
}
void add(int a,int b){ e[idx]=b,ne[idx]=h[a],h[a]=idx++;}
int main(){memset(h,-1,sizeof(h));n=read(),m=read();for(int i=1;i<=n;i++) a[i]=read();int l=1,r=1e6,pos=0;for(int i=1;i<=m;i++){int d=read();if(l>pos) pos+=d;else pos-=d;//l,r,pos的相对位置不影响 if(pos<l||pos>r) continue;//l,r不会被割开 if(pos-l<r-pos){//从多的部分指向少的部分,只保存多的部分继续往下做,少的部分通过对称得出 for(int i=l;i<pos;i++) add(2*pos-i,i),vis[i]=1;/*i不可以做开始点*/l=pos+1,ed[pos]=i;}else{for(int i=pos+1;i<=r;i++) add(2*pos-i,i),vis[i]=1;r=pos-1,ed[pos]=i;}}for(int i=l;i<=r;i++) ans[i]=i-pos;for(int i=1;i<=1e6;i++) if(!vis[i]) dfs(i);for(int i=1;i<=n;i++)if(ed[a[i]]) printf("Yes %d\n",ed[a[i]]); else printf("No %d\n",ans[a[i]]);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/26645.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2. CSS3的新特性

2.1 CSS3的现状 ●新增的CSS3特性有兼容性问题, ie9才支持 ●移动端支持优于PC端 ●不断改进中 ●应用相对广泛 ●现阶段主要学习: 新增选择器和盒子模型以及其他特性 CSS3给我们新增了选择器,可以更加便捷,更加自由的选择目标元素&#xff1a; 1.属性选择器 2.结构伪类选择器…

Android之Intent

意图介绍 一个意图(Intent)对象包含了目标组件、动作、数据、类别、附加数据、标志六个部分。 目标组件 目标组件可以帮助应用发送显式意图调用请求。在创建Intent时&#xff0c;可以通过setComponent方法来设置一个组件&#xff0c;如&#xff1a; //设置组件 intent.setC…

【Linux C】fseek函数使用小结

0x00 前言 演示使用的Linux版本&#xff08;#cat /etc/issue&#xff09;&#xff1a;Ubuntu 18.04.6 LTS \n \l 最后更新日期&#xff1a;2023.7.17 0x01 fseek函数使用小结 1.函数描述 设置stream文件的位置指针偏移到指定位置1。 2.声明 #include <stdio.h> in…

ceph安装部署

Ceph 简介 存储基础 单机存储设备 单机存储的问题 分布式存储的类型 分布式存储&#xff08;软件定义的存储 SDS&#xff09; Ceph 架构 Ceph 核心组件 ​编辑 Pool中数据保存方式支持两种类型 OSD 存储后端 Ceph 数据的存储过程 Ceph 集群部署 基于 ceph-deploy …

Zookeeper集群

Zookeeper集群 一、Zookeeper 概述Ⅰ、Zookeeper 定义&#xff1a;Ⅱ、Zookeeper 工作机制Ⅲ、Zookeeper 特点Ⅳ、Zookeeper 数据结构Ⅴ、Zookeeper 应用场景Ⅵ、Zookeeper 选举机制 二、部署 Zookeeper 集群Ⅰ、安装前准备Ⅱ、安装Zookeeper 三、部署kafka 集群Ⅰ、下载安装包…

Fiddler抓包使用简介

目录 Fiddler简介 请求抓包 抓取PC端HTTPS请求 抓取移动端请求 请求查看 发送请求 Mock接口 断点调试 弱网模拟 请求重放 修改HOSTS 总结&#xff1a; Fiddler简介 Fiddler是一款免费的Windows平台的抓包工具&#xff0c;功能强大&#xff0c;使用简单。Fiddler抓…

IDEA运行TOMCAT出现404

就这种问题&#xff0c;每个人的原因都不一定一样&#xff0c;我出现这种问题的解决方法在这里记录一下。顺便把我的配置记录一下。 除了本文的问题&#xff0c;还有可能是默认打开的文件名错了&#xff0c;或者端口被占用。 软件版本IDEA2023 TOMCAT9 亲测&#xff1a;IDE…

C语言进阶之程序环境和预处理

程序环境和预处理 1. 程序的翻译环境和执行环境2. 详解编译链接2.1 翻译环境2.2 编译的几个阶段2.3 运行环境 3. 预处理详解3.1 预定义符号3.2 #define3.2.1 #define 定义标识符3.2.2 #define 定义宏3.2.3 #define 替换规则3.2.4 #和##3.2.5 带副作用的宏参数3.2.6 宏和函数对比…

「网络编程」应用层协议_ HTTPS协议学习及原理理解

「前言」文章内容大致是应用层协议的HTTPS协议讲解&#xff0c;续上篇HTTP协议。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、HTTPS协议介绍二、什么是"加密"三、为什么要加密四、常见的加密方式五、数据摘要 && 数据指纹六、…

STM32 Proteus仿真可设置时间红绿灯-0075

STM32 Proteus仿真可设置时间红绿灯-0075 Proteus仿真小实验&#xff1a; STM32 Proteus仿真可设置时间红绿灯-0075 功能&#xff1a; 硬件组成&#xff1a;STM32F103C6单片机 74HC595串入并出芯片4个2位数码管显示十字路口红绿灯时间多个按键 1.包含机动车指示灯(红、黄、…

JVM类加载

1.什么是类加载 类加载子系统只是负责加载class字节码文件将类信息放至方法区中&#xff0c;至于是否可以运行&#xff0c;是执行引擎负责的事情。 2.类加载的过程 2.1加载 IO读取字节码文件 为每个类创建一个Class类的对象 将此对象存储在方法区中 2.2链接 2.2.1验证 验证…

noSQL的小练习

目录 Redis&#xff1a; 1、 string类型数据的命令操作&#xff1a; 2、 list类型数据的命令操作&#xff1a; 3、 hash类型数据的命令操作&#xff1a; MongoDB&#xff1a; 1. 创建一个数据库 名字grade 2. 数据库中创建一个集合名字 class 3. 集合中插入若…