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),再带回去算即可
注:可能需要考虑以下奇偶性的问题
代码
由于我是口胡选手,所以就先咕着。