CF VP Contest 1481

\(\tt Round\ 699,Div.2\)

被 xhj 虐了。

CF1481A

首先我们计算如果所有操作都执行,那么会去到的位置 \((x^\prime,y^\prime)\)

然后计算 \(x^\prime-x,y^\prime-y\),得知需要少走几个 U/D/L/R

判断有没有这么多个 U/D/L/R 即可。

CF1481B

注意到当原序列单调不升时,怎么滚岩石答案都是 \(\texttt{-1}\)

而想让原序列变成单调不升,每个点需要滚 \(O(v)=O(100)\) 块岩石。

暴力模拟,如果原序列已经单调不升就 break

CF1481C

考虑模拟,倒序填色,这样就没有颜色覆盖的烦恼。填的过程中动态维护

  • \(V_i\) 是一个 vector<int>,代表要填这种颜色却还没填上的位置
  • \(U_i\) 是一个 vector<int>,代表是要被填为这种颜色的位置。
  • \(W\) 是一个 vector<int>,代表已经被填好的位置。

对于当前要填的颜色 \(c\)

  • 优先填涂 \(V_c\)(填完就在 \(V_c\) 中删去这个位置)。
  • 如果 \(V_c\) 已经为空,那么填涂 \(U_c\)(覆盖在相同颜色上结果不变)
  • 如果 \(U_c\) 为空则填涂 \(W\)(即使当前填涂完颜色不对,也会有后来的颜色覆盖)
  • 如果 \(W\) 为空那就输出 \(-1\)。(找不到一个能填的位置)

CF1481D

定理:在 \(n\ge3\) 的时候必有解。

证明:我们提出一个三元组 \(\{1,2,3\}\),如果存在同色环就 \(\tt skip\),然后考虑形如 \(\tt ABB\) 的环(\(\tt AAB\) 同理)。

  • \(m\bmod 3=0\),此时答案是 \(\tt BAB,\cdots,BAB\)
  • \(m\bmod 3=1\),此时答案是 \(\tt ABB,\cdots,ABB,A\)
  • \(m\bmod 3=2\),此时答案是 \(\tt BBA,\cdots,BBA,BB\)

对于 \(n=2\) 的情况

  • \(G_{1,2}\ne G_{2,1}\) 并且 \(m\) 是偶数,无解。
  • 有解,解为 \(m+1\)\(1,2\) 交替。
posted @ 2022-07-20 19:02  One_Zzz  阅读(39)  评论(0)    收藏  举报