CF538G (套路题)

CF538G

题目大意

你有一个长度为\(l\)的指令序列,每个指令为向上,向下,向左,向右中的一种。

机器人会循环执行该序列,即,执行完第\(l\)个指令后,就会重新开始执行第一个指令。

现在,给你\(n\)个信息,每个信息为:在第\(t\)秒时,机器人所处的位置\((x,y)\)

请求出一个合法的序列,如无解,则输出\(No\)

\(n\le2*10^5\ l\le2*10^6\)

解题历程

一开始,真的很自闭,二维的太难考虑了。

去翻题解,题解第一行说,这样的位移可以等价于每秒独立地在\(x+y\)\(x-y\)方向上\(+1\)\(-1\)

豁然开朗。

于是,现在只需要考虑一维的情况了。

我们发现,它循环多次,又剩余一点。

我们就考虑这多出的一点,令:

\(t=p*l+q\)

若我们假设整个序列在当前方向上的位移为\(x\)\(q\)内的位移为\(f(q,x)\),\(t\)内的位移为\(sum\)

\(f(q,x)=sum-px\)

我们把所有的信息按\(q\)排序,那么,需满足以下限制

\[|f(q_i,x)-f(q_{i+1},x)|\le q_{i+1}-q_i \]

然后,解方程,找出值域内的任意\(x\),再带回去算即可

注:可能需要考虑以下奇偶性的问题

代码

由于我是口胡选手,所以就先咕着。

posted @ 2019-11-08 20:07  霞光  阅读(239)  评论(0编辑  收藏  举报