A

如果 $x > k$ 那么可以随便选。$[1,k]$ 我们选择后一半,这样保证任意两个数字相加都 $> k$ 就好了。

B

直接枚举即可。$0,1,8$ 反转后不变,$2,5$ 反转后互换。

C

$\geq s$ 最小,也就是尽量靠近 $s$。于是从大到小枚举相同的前缀长度,每次暴力看一下是否有一种方案可行,如果有的话就直接贪心按照字典序放置剩下的字符。

D

我赛时的做法:

对于 $\leq \sqrt n$ 的素数,可以直接暴力处理询问。问题就变成了单点加,求全局最小值。我们倒过来做,就变成了单点减,求全局最小值。每次更新一下就好了。这一部分复杂度是 $O(98(n+q))$ 的

对于 $> \sqrt n$ 的素数,每次询问最多只会增加一个这样的素数的出现次数,所以我们可以统计一下每个素数的出现次数,如果 $\geq n$,我们把包含它的所有询问提出来,做上面的做法。由于每处理一个这样的素数,首先询问的和肯定是 $q$,所以还是 $O(q)$ 的;然后每次会花 $O(n)$ 的代价让这个素数的出现次数减掉 $n$,也就是均摊 $O(1)$ 的。总复杂度 $O(98(n+q))$。

一个非常简单的做法:

直接分解质因数,然后对每个质数维护 multiset 就完了。。需要额外记录一下这个质数是否每个位置都 $\geq 1$,这样 multiset 只需要存 $\geq 1$ 的数,复杂度就是 $O(n \log^2 n)$ 了。

E

要注意到一个非常好的性质这个题就简单了。。

如果两个数字的最高位不同,答案一定是全 $1$。因为我们可以选择区间 $[0111\ldots,1000\ldots]$,就取得最大值了。

否则考虑我们询问区间和变成询问两个前缀和的疑惑和,设 $s(n) = \text{Xor}_{i=0}^n i$,那么有以下规律:

$$ s(n) = \begin{cases} n&n \equiv 0 \pmod 4\\ 1&n \equiv 1 \pmod 4\\ n+1&n \equiv 2 \pmod 4\\ 0&n \equiv 3 \pmod 4 \end{cases} $$

发现答案至少可以取到 $r$。由于我们这里一定要取长度为奇数的区间,所以问题变成了我们从区间中选出两个奇偶性不同的数字 $x,y$,获得答案 $s(x) \text{ xor } s(y)$,那么容易发现答案最大是 $r+1$(也就是在 $r \equiv 0 \pmod 4$ 的时候有一个数 $r' \equiv 1 \bmod 4$;或者是 $r \equiv 2 \pmod 4$ 的时候有一个数 $r' \equiv 0 \pmod 4$;其他的答案都会是 $0$。这样就 $O(n)$ 完成了。要注意我们找的 $r'$ 是左端点减一的答案。

F

首先行列独立分开做。

这个循环节看起来就和阶一样,考虑分解质因数后用求阶的方法求答案(每次试除一个质数一直到不合法位置),那么就是快速判断 $(d,n)$ 表示前 $n$ 个数中 $d$ 是否是循环节了。

先把这 $n$ 个数分成 $\frac{n}{d}$ 个长度为 $d$ 的块,问题就变成了 $(1,\frac{d}{n})$。

注意到题目有个很诡异的限制是「询问区间不能重复」,那么肯定先考虑重复怎么做:发现只需要询问 $(1,n-1)$ 和 $(2,n)$ 是否相同就好了。

如果不能重复,但是我们可以通过让两个重复的区间同时询问第三者来看看是不是相同。如果 $n=2$,直接询问 $(1,1),(2,2)$ 是否相同;否则这之后 $n$ 是个奇数,设 $t=\lfloor \frac{n}{2}\rfloor$,先询问 $(1,t),(t+1,n-1)$,再询问 $(1,t),(t+2,n)$,如果都相同就可以推出 $(t+1,n)$ 相同,进而退出 $(1,t),(t+1,n)$ 相同,那么全都相同。

算一下操作次数:首先注意到如果有 $2$ 这个质因子,每次只需要花费 $1$ 的代价就可以除二,所以最坏情况应该是形如 $3^x$,也就是操作次数为 $2\log_3(nm)$,然后算一下发现并没有超过上界。

Last modification:March 10th, 2021 at 11:33 am
如果觉得我的文章对你有用,请随意赞赏