日记

日记

Tue Jun 17 2025
4 分钟

模拟赛。

T1 Link to T1

赛格门特吹神力!

T2 Link to T2

我们发现,如果把每个字符到前面与它相同的字符的距离处理出来当作串,那么就可以当作普通的字符串匹配了。比如 aab\texttt{aab}bba\texttt{bba},处理出来都是 {0,1,0}\{0,1,0\},所以可以匹配。就可以直接拿字符串哈希做了。

但是我们发现一个问题:abab\texttt{abab} 的后缀显然是和 aba\texttt{aba} 匹配的,但是我们发现这个后缀对应的数组是 {0,2,2}\{0,2,2\},而 aba\texttt{aba} 对应的数组是 {0,0,2}\{0,0,2\}。究其原因是最前面的一个 a\texttt{a} 影响到了中间那个 a\texttt{a}。所以我们在从哈希里删除的时候还得消除它对后面的影响。

T3 Link to T3

我们发现答案上界是 distdis_t。(disidis_i 表示 sis \to i 的最短路)。因为我们如果填的数种类多于 distdis_t,那么一定有 ii 使得删除所有 ii 的边后这条最短路连通。

然而这个上界是可以达到的。对于一条 uvu \leftrightarrow v 的边,我们将其边权设置为 max(disu,disv)\max(dis_u,dis_v)。就相当于把整个图按照 disdis 分层。每层之间一定是一个割。

T4 Link to T4

其实不难。

有这么一个 trick:min(xy,yz)xz(xyz)\min(x \oplus y,y \oplus z) \le x \oplus z(x \le y \le z)。所以我们如果想判一个集合 {a1,a2,,an}\{a_1,a_2,\dots,a_n\} 是否合法,我们只需要将 aa 排序,然后判断 i[1,n)\forall i \in [1,n) 是不是都有 aiai+1xa_i \oplus a_{i + 1} \ge x 就行。

证明:
我们考虑 x,zx,z 在二进制下第一位不同的。显然,只能是 xx 的是 00zz 的是 11。自然,yy 也只能是 0,10,1。如果 yy 那一位是 00,显然 xyxzx \oplus y \le x \oplus zyzy \oplus z 继续考虑就行。反之亦然。

因为题目让我们选一个集合出来,我们不需要管顺序,所以我们就可以将 aa 排序,然后就有 O(n2)O(n^2) dp:

dpi=j=1i1dpj[aiajx]dp_i = \sum_{j = 1}^{i - 1}dp_j[a_i \oplus a_j \ge x]

显然,我们需要优化。我们考虑在什么区间内 aiajxa_i \oplus a_j \ge x。我们记录一个 tmptmp。从高到低枚举每一位。

  • aia_i 这一位是 00xx 这一位是 00
    这个区间里的数这一位可以是 11,于是加入一个区间:[tmp+2j,tmp+2j+(2j1)][tmp + 2^j,tmp + 2^j + (2^j - 1)]。然后继续考虑 tmptmp 这一位是 00 的情况。
  • aia_i 这一位是 00xx 这一位是 11
    显然 tmptmp 这一位只能是 11
  • aia_i 这一位是 11xx 这一位是 00
    这个区间里的数这一位可以是 00,于是加入一个区间:[tmp,tmp+(2j1)][tmp,tmp + (2^j - 1)]。然后继续考虑 tmptmp 这一位是 11 的情况。
  • aia_i 这一位是 11xx 这一位是 11
    显然 tmptmp 这一位只能是 00

然后我们就获得了 O(logV)O(\log V) 个区间。我们枚举每个区间,二分它在 aa 上所对应的区间。于是我们就可以用前缀和 O(1)O(1) 转移了。

时间复杂度 O(nlognlogV)O(n \log n \log V)

后日谈 Link to 后日谈

被做局了。发现自己的数论和图论烂的一批,晚上回家还是刷题吧。