【A】构造(待完坑)

Keep the Sum

看到排序考虑构造出 \(\texttt{swap}\) 函数。
如果存在 \(a_i+a_j=K\),如果我们想要 \(\texttt{swap}(i,k)\):让 \(a_i\) 等于 \(a_k\),然后让 \(a_k\) 等于最初的 \(a_i\),就完成了交换。
但是这种方法存在局限性。我们考虑另外一种做法:

  • 首先将一堆 \(a_i+a_j=K\)\(a_i,a_j\) 分别交换到 \(a_1,a_n\)。然后令 \(a_1\leftarrow 0,a_n\leftarrow K\)
  • 然后对于中间部分的 \(a_i=0\),可以与 \(a_n\) 匹配,然后交换到前面。\(a_1\)\(a_i=K\) 匹配,同理。
  • 令最后一个被加入的 \(0\) 变成 \(1\),最后一个被加入的 \(K\) 变成 \(K-1\),从步骤一开始继续操作。

我们相当于在排序一个前缀和后缀。
无解即为:序列无序且不存在 \(a_i+a_j=K\)

Tensor

显然这个填颜色是要求划分为两条链。
使用两个栈分别存储白链和黑链,从小到大加入每个节点。不妨令白栈栈顶为 \(w\),黑栈栈顶为 \(b\)
查询当前加入的节点 \(i\) 与两个栈顶的关系:

  • \(w\rightarrow i,b\rightarrow i\)
  • \(w\rightarrow i,b\not \rightarrow i\)
  • \(w\not \rightarrow i,b\rightarrow i\)

由于最大反链个数小于等于 2,所以不会有两个栈顶都到达不了的情况。
对于后两种情况,直接加入对应的栈。对于第一种情况,发现我们决策不了。引入新的栈,用来储存这类点。不妨设其栈顶为 \(t\)
那么以后加入 \(i\),只需要询问 \(t\)\(i\) 的关系即可,如果 \(t\rightarrow i\),那么加入 \(i\) 到待定栈。
否则,我们查询 \(w,b\)\(i\) 的关系,然后将 \(i\) 加入对应的栈,待定栈的点全部加入另外一个栈。
每个节点的查询个数不超过 2,总查询次数不超过 \(2n\)

Funny or Scary?

Grid Reset

Keep the Sum
Tensor
Funny or Scary?
Grid Reset
Choose Your Queries
Make Triangle
Game Bundles
Wonderful Guessing Game

posted @ 2025-09-10 18:01  TallBanana  阅读(4)  评论(0)    收藏  举报