国庆备课

P16952

题目传送门

思路

Ad-hoc 吗,我们先大胆观察样例。

然后发现 \(n\le7\) 无解。

然后发现对于 \(n\ge8\) 我们可以选择在 \(n=8\) 的基础上修改。

然后我们发现对于 \(\sum_{i=2}^{n-1}\left [mex\left \{ A_{i-1},A_i,A_{i+1} \right \} \right ]=0\) 我们让其贡献加 \(1\),只用在 \(1\) 堆里塞一个 \(1\) 即可。

对于 \(\sum_{i=2}^{n-1}\left [mex\left \{ A_{i-1},A_i,A_{i+1} \right \} \right ]=1\) 同理。

然后对于 \(\sum_{i=2}^{n-1}\left [mex\left \{ A_{i-1},A_i,A_{i+1} \right \} \right ]=2\)
很显然能想到一种方法 \(010101...\)这样构造下去。

但是我们发现,你需要最小化这个序列 \(1\) 的个数,然后我们发现 \(100100...\)这样也可以,而且也是加 \(1\) 个元素,贡献加 \(1\)。

于是我们发现在 \(n=8\) 的基础上每加 \(3\) 就是一个合法状态,所以对于 \(n\% 3=2\) 且 \(n!=5\) 都成立。

按思路模拟即可,时间复杂度 \(O(Tn)\)。

代码

P12051

题目传送门

思路

依旧 Ad-hoc,依旧观察样例。

我们发现样例有些废,但也有启发。

比如从样例二,我们发扬人类智慧,我们或许可以先找到一个质数 \(p\),然后按照 \(p,p-1,p+1,p-2,p+2,...\)这样构造下去。

然后我们发现让 \(p\) 离 \(n/2\) 越近越好。

于是我们欧拉筛质数,二分查找,在模拟即可。

时间复杂度 \(O(t(n+logn)+n)\)。

代码

P11277

题目传送门

思路

对于题面有一个非常显然的结论,我们每放一个 \(1\),贡献就会加 \(n-1\)。

根据上面的结论我们可将情况统一转到 \(k\le n\)。

然后我们发现连放三个相同的数贡献加二,两个贡献加一。

然后我们从 \(n\) 开始放,每放一个数,数的大小加一,直到放完即可。

这样既可不满足 \(\exists i,j\left ( 1\le i\le j\le n \right ) ,min(a_i,a_j)|max(a_i,a_j)\)。

于是乎模拟即可,时间复杂度最坏 \(O(n)\)。

实际上最开始读成了 \(gcd\),于是此题有点不可做。

代码

P13686

题目传送门

思路

我们先抛开题目不谈,来探究一下异或的性质。

让我们来求一下这个函数:\(f\left ( n \right ) =1\oplus 2\oplus 3\oplus ...\oplus n\)

请求 \(f(n)\)。

我们可得
\( f(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} \)

然后我们分析,对于 \(n\le4\) 直接特判掉,因为这不太符合我们接下来推的。

首先对于 \(n=2^k\),那么输出 \(n\) 即可,显然。
反之我们应找到 \(2^k\le n\) 的最大的 \(k\),然后输出 \(2*2^k-1\) 即可,显然。

时间复杂度 \(O(Tlogn)\)

代码

P16496

题目传送门

我们发扬人类智慧,观察数据可得:

  • n=1,num=m*2
  • m=1,num=n*2
  • m,n为奇数,num=n*m+n+m-1
  • m*n+m+n

构造显然:你都能观察出上面了,还不会构造?

代码

P3273

题目传送门

非常简单的可并堆,由题可得。

经过合理分析可得 \(O((n+q)log(n+q))\)

代码

P15321

题目传送门

思路

根据题面,当构造的 \(mex=k\) 我们首先能想到将数分为三类:

一种是小于当前的 \(k\) ,一种是等于当前的 \(k\),一种是大于当前的 \(k\)。

接下来令其分别为 \(a,b,c\)。

易得,我们应这么处理:

  • 如果 \(b>2\),那么 \(b-2\)
  • 如果 \(b>0且c>=2\),那么 \(b-1,c-1\)
  • 如果 \(b>1且c>=1\),那么 \(b-1,c-1\)
  • 如果 \(b>0且a>=2\),那么 \(b-1,x-1\)

如果处理完后 \(x>=k 且 y=0\),那么可以,我们在此基础上在22配对即可。

反之不行。

最后,我们在注意,中间如果有断档,那么肯定不行,记录一下即可。

时间复杂度 \(O(\sum n)\)。

代码

posted @ 2026-10-07 21:34  c_z_y  阅读(8)  评论(0)    收藏  举报