CF538G
神仙题!
发现如果你直接做的话,横纵坐标的改变会相互影响。所以考虑将整个平面旋转 \(45\) 度,使得 \((x,y)\) 转到 \((x+y,y-x)\)。同时原变得四种操作对于横纵坐标的改变方式会变为 \((1,1),(1,-1),(-1,1),(-1,-1)\)。那么现在我们的改变横纵坐标就可以分离开来了。
但是我们注意到改变方式为 \(\{-1,1\}\),考虑将其变为 \(\{1,0\}\)。那么就相当与我们对于所有的点加上他的时间并除 \(2\)。则原本的一个三元组 \((x_i,y_i,t_i)\) 就会变为 \((\dfrac{x_i + y_i + t_i}{2},\dfrac{y_i - x_i + t_i}{2},t_i)\)。而对于每一维,我们的方式为不动或者 \(+1\)。(若 \(\dfrac{x_i + y_i + t_i}{2}\) 或者 \(\dfrac{y_i - x_i + t_i}{2}\) 不为整数,则无解)
此时考虑将二维拆成两个一维去做。那么我们只需要求两遍以下的问题:
求出一个序列 \(a\),其满足 \(a_i = a_{i-n}(i > n)\) 并且 \(a_i \in \{0,1\}\),同时给出 \(m\) 条限制,第 \(i\) 条限制形式为 \((t_i,x_i)\),而 \(a\) 需要满足 \(\forall i \in[1,m],\sum^{t_i}_j a_j = x_i\)。
记 \(s_i = \sum^i_{j=1} a_j\),由于 \(a\) 具有周期性质,则我们有 \(s_i = \lfloor \dfrac{i}{n} \rfloor s_n + s_{i \bmod n}\)。则对于第 \(j\) 个限制,先令 \(p_j = \lfloor \dfrac{t_j}{n} \rfloor,q_j = t_j \bmod n\) 我们有 \(x_j - p_j \times s_n = s_{q_j}\)。然后考虑按照 \(q_j\) 的大小排序,则相邻的两个限制中间的区间会对于 \(s_n\) 的大小产生一个约束。具体的:
- \(0 \le x_1 - p_i \times s_n \le q_i\)。
- \(0 \le (x_{i+1} - p_{i+1} \times s_n) - (x_i - p_{i} \times s_n) \le q_{i+1} - q_i\),即第 \(i\) 个限制和第 \(i + 1\) 个限制所产生的贡献。
- \(0 \le s_n - (x_n - p_n \times s_n) \le s_n - q_n\)。
考虑去求解 \(s_n\),维护两个数 \([L,R]\),满足 \(s_n \in [L,R]\),然后边扫边更新 \([L,R]\) 即可。如果 \(L > R\) 则输出 NO。
在扫完之后,我们钦定 \(s_n = L\),然后直接构造即可。
Code。

浙公网安备 33010602011771号