ht 2026 noi 模拟赛
7.9
\(rk 39\)。被全面偏序的说。考虑到做了 \(4 h\) 的 \(t1\),我认为很多时候猜的结论应该打一个简单的暴力验证一下,再写。
除了手模之外(不是说手模不重要),更多的要多想想,从手模中获取的结论/性质,有没有更优雅的应用。以防出现一道题花费时间过久的问题。
t1
\(T\) 组询问,每次给定 \(n,L,R\)。
接下来 \(n\) 天亲戚会给小明压岁钱,第 \(i\) 天小明的母亲会收到 \(i\) 块钱,最开始小明手上有 \(0\) 块钱。第 \(i\) 天如果小明手上的钱严格小于 \(i\)或者第 \(i\) 天是小明生日,那么母亲会把 \(i\) 块钱给小明;否则母亲不但不会把 \(i\) 块钱给小明,反而会从小明手里拿走 \(i\) 块钱。
你需要求出 \(n\) 天中,有多少天满足如果当天是小明的生日,则最后小明手上的钱属于区间 \([L,R]\)。
\(1 \le T \le 10^4,1 \le n,L,R \le 10^{18}\)
1
维护一个二元组 \((i,x)\) 表示第 \(i\) 天小明手上有 \(x\) 块钱。
观察一个重要的中间状态。注意到当 \(x \lt i\) 时,接下来每两步 \(x\) 会减少 \(1\),直至 \(x=0\) 为止。容易观察到 \(x\) 下一次变成 \(0\) \(i\) 会翻三倍,所以只有 \(\log\) 段连续下降段。
因此我们可以 \(O(\log n)\) 的计算出 \((i,x)\) 最终到 \((n,x')\) 时 \(x'\) 的值。
容易计算出所有本来就可以拿到钱的日子总数。
考虑本来拿不到钱的日子。对 \(\log\) 段连续下降段考虑,注意到当 \(x \ge 3\) 时,有:\((i+2,x-3)\),所以对大多数位置(非太靠左的)作为生日的影响是一致的。
那你比如暴力计算每段后 \(10\) 个位置,时间复杂度 \(O(T \log^2 n)\)。
t2
\(P,S,R\) 分别表示剪刀、石头、布。给定一个由上述字符构成的字符串 \(S\)。定义一次操作为得到一个新的字符串 \(T\),每位是 \(S\) 中相邻两位比赛后不败的一方(考虑到平局)。已知字符串 \(S\) 迭代操作 \(k\) 次得到的串 \(T\),求有多少种可能的初始串 \(S\)。
\(1 \le |T|,k \le 3 \times 10^3\)。
1
显然有 \(O(|T|2^kk)\) 的 dp 做法。
2
考虑到我们只关系字符之间的相对关系。换言之,我们将胜利关系连边,我们只关心字符在三元环上的相对位置,故而考虑差分。比方令 \(2,1,0\) 分别表示 \(P,S,R\),然后令 \(b_i = (s_{i+1}-s_i) \bmod 3\),那么 \(b_i = 0\) 就表示平局,\(b_i = 1\) 表示剩下右边,\(b_i = 2\) 表示剩下左边。容易发现一种相对关系对应三个字符串,我们不妨只考虑相对关系。
手玩相邻 \(2\) 数结合/打表可以发现,操作一次可以被如下刻画:\(2\) 左移一位,原位变成 \(0\);\(2\) 和新位上的数相加;去掉字符串末尾元素。
考虑最终态的串,其中的 \(1\) 必然由原串原封不动地得到;而 \(2\) 则由 \(k\) 位后的 \(2\) 左移得到。我们先特判钦定的 \(2\) 的左移过程中遇到 \(1\) 的情况,这显然无解。否则我们得到了若干未放置的连续段,并且我们希望迭代操作 \(k\) 次后这些连续段变成全 \(0\)。
不妨将 \(1\) 视为左括号,\(2\) 视为右括号。这要求连续段构成了一个可空的合法括号匹配,并且匹配括号的距离不超过 \(k\);同时对于左边无限制/右边无限制段,其前/后 \(k\) 个位置可以有未匹配的右/左括号。
这两者都可以通过 \(dp\) \(O(n^2)\)得到。具体地,你可以抓住右端点有值的状态,并枚举同层最后一个距离最远的括号,然后其内部就没有限制了;同时再抓住右端点恰好有一个未匹配右括号的状态,转移枚举最近的上一个未匹配右括号。当然也可以直接定义想得到的东西,直接 \(dp\) 也是容易的。
注意特判左右两边都没限制的情况。
时间复杂度 \(O(n^2)\)。
t3(无原)
交互题在有干扰的情况下,考虑不确定性做法,即利用随机化,使得正确的概率尽可能大。

浙公网安备 33010602011771号