CF538G (套路题)

CF538G

题目大意

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

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

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

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

(nle2*10^5 lle2*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),再带回去算即可

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

代码

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

原文地址:https://www.cnblogs.com/river-flows-in-you/p/11823005.html