爽!!!!!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
A
Difficulty: 3- / Easy
Tag:-
何意味啊。好久没看见过 A 是暴力题的了。上次见到还是在有 n,m,kn,m,kn,m,k 个 1,2,31,2,31,2,3,可以擦去其中两个换剩下一个,求最后剩下的数可能是什么。
注意到当 n≤1018n\le 10^{18}n≤1018 时,0≤d(n)≤10000\le d(n)\le 10000≤d(n)≤1000,所以 nnn 往后取 100010001000 个判肯定是没问题的。
时间复杂度:O(tklogn)O(tk\log n)O(tklogn),其中 k=1000k=1000k=1000。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
B
Difficulty:3- / Easy
Tag:-
为什么我说 B<A。
随便想几种情况可知,左右端点覆盖一定不会使两个数的顺序改变,而如果所有数的顺序不变的话一定可以操作出来。
所以我们只需要看顺序是否改变即可。
时间复杂度:O(∑n)O(\sum n)O(∑n)。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
C
Difficulty:3- / Easy
Tag:巴巴博弈
为什么我说 C<B。
不知道为什么要设置成 23\frac{2}{3}32 。难道说出题人也刚学待修莫队?
首先当 pq<23\frac{p}{q}\lt\frac{2}{3}qp <32 时,显然 Alice 减 ppp,Bob 为了更优只能减 qqq,此时 p−1q−1<pq<23\frac{p-1}{q-1}\lt\frac{p}{q}\lt\frac{2}{3}q−1p−1 <qp <32 ,Bob 不炸了。
然后当 pq≥1\frac{p}{q}\ge 1qp ≥1 时,显然 Alice 减 qqq,Bob 为了更优只能减 ppp,此时 1<pq<p−1q−11\lt\frac{p}{q}\lt\frac{p-1}{q-1}1<qp <q−1p−1 ,Bob 不炸了。
然后当 23≤pq<1\frac{2}{3}\le \frac{p}{q}\lt 132 ≤qp <1 时,显然 Alice 减 ppp 还是减 qqq Bob 跟着就行了,显然最终可以到 23\frac{2}{3}32 ,Bob 不爽了。
时间复杂度:O(t)O(t)O(t)。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
D
Difficulty:4.7 / Easy+
Tag:根号分治
首先先打暴力。我们可以枚举长度 Ai,2×Ai,3×Ai,...A_i,2\times A_i,3\times A_i,...Ai ,2×Ai ,3×Ai ,...,然后判断。代码如下:
时间复杂度:O(n2)O(n^2)O(n2)。
然后发现这个很能根号分治的样子。设置阈值为 BBB。
* Ai>BA_i\gt BAi >B:直接暴力,O(n2B)O(\frac{n^2}{B})O(Bn2 )。
* Ai≤BA_i\le BAi ≤B:把所有 AiA_iAi 相同的放一块查询。将所有数按对 AiA_iAi 取模的余数分组,然后加个偏移放桶里查询就行了。O(nB)O(nB)O(nB)。
总共是 O(nB+n2B)O(nB+\frac{n^2}{B})O(nB+Bn2 ) 的,BBB 取 n\sqrt nn 时有 O(nn)O(n\sqrt n)O(nn )。
然后你会发现 MLE 了。嗯。
其实我场上最终代码空间是 O(n)O(n)O(n) 的,但这个看得更清楚吧应该。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
E1
Difficulty:4.3 / Easy
Tag:构造
注意到限制很宽松,只需要在 32(n+m)32(n+m)32(n+m) 次询问内求出即可。所以怎么乱搞都行吧。
注意到第如果第 k+1k+1k+1 条路径不包含第 kkk 条路径的话,一定只有最后一个元素不同。
所以我们对于新点,dfs 回溯即可。
如果遍历到之前的点了怎么办?
注意到这是个 DAG。所以它的后面几条路径都是固定的,之前也走过。直接加上走过的路径即可。
然后注意第一个遍历到的不一定是源点。dfs 完了还得继续看有没有新点没走。
感觉我这个应该也只用了不到 2(n+m)2(n+m)2(n+m) 个询问?
卧槽我是不是没去重。 如果这个代码被 hack 了,我将把 Difficulty 升至 7+ / Hard。