2022.10.2好题选讲(构造专题)

本文精选六道构造题,涵盖分数拆分、数列构造、矩阵填充等内容,通过奇偶讨论等方式提供了解题思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

T1

题目大意

  构造一个三元组 ( a , b , c ) (a, b, c) (a,b,c) 满足 4 n = 1 a + 1 b + 1 c \frac 4n = \frac 1a + \frac 1b + \frac 1c n4=a1+b1+c1

  其中 n ≤ 1 e 6 , ∣ a ∣ , ∣ b ∣ , ∣ c ∣ ≤ 1 e 18 n \le 1e6, |a|, |b|, |c| \le 1e18 n1e6,a,b,c1e18

分析

  分奇偶讨论:

  1. n n n 是偶数的时候: 4 n = 1 n + 1 n + 2 n = 1 n + 1 n + 1 1 2 n \frac 4n = \frac 1n + \frac 1n + \frac 2n = \frac 1n + \frac 1n + \frac 1{\frac 12 n} n4=n1+n1+n2=n1+n1+21n1,所以 a = b = n , c = 1 2 n a = b = n, c = \frac 12 n a=b=n,c=21n
  2. n n n 是奇数的时候:令 n = 2 k + 1 n = 2k + 1 n=2k+1 4 2 k + 1 = 2 k − 2 k ( 2 k + 1 ) = 2 k + 1 + 2 ( k + 1 ) ( 2 k + 1 ) \frac 4{2k + 1} = \frac2k - \frac{2}{k(2k+1)} = \frac{2}{k + 1} + \frac 2{(k + 1)(2k + 1)} 2k+14=k2k(2k+1)2=k+12+(k+1)(2k+1)2,也就是说 k k k 是偶数的时候就有 a = b = k , c = 1 2 k ( 2 k + 1 ) a = b = k, c = \frac 12k(2k + 1) a=b=k,c=21k(2k+1) k k k 是奇数的时候就有 a = b = k + 1 , c = 1 2 ( k + 1 ) ( 2 k + 1 ) a = b = k + 1, c = \frac 12(k + 1)(2k + 1) a=b=k+1,c=21(k+1)(2k+1)

T2 CF1722G

题目大意

  试构造一个长为 𝑛 𝑛 n 的数列使得奇数项的异或和等于偶数项的异或和

分析

  这里显然就是整个数列的异或和为 0 0 0 的意思,一开始想的是两两配对,然后发现不太好整,所以考虑四个四个配对,那么久分成四种情况:

  1. n   m o d   4 ≡ 0 n \bmod 4 \equiv 0 nmod40,显然这里两两配对都可以,直接 0 ∼ n − 1 0 \sim n - 1 0n1
  2. n   m o d   4 ≡ 1 n \bmod 4 \equiv 1 nmod41,那就可以 2 ∼ n 2 \sim n 2n,然后最后一个数字填 0 0 0
  3. n   m o d   4 ≡ 3 n \bmod 4 \equiv 3 nmod43,那么可以 4 ∼ n 4 \sim n 4n,然后最后加上 1 , 2 , 3 1, 2, 3 1,2,3
  4. n   m o d   4 ≡ 2 n \bmod 4 \equiv 2 nmod42,就可以把前面的一个组拿出来一个,然后就是 10 ∼ n + 3 10 \sim n + 3 10n+3,后面加上 0 , 2 , 4 , 7 , 8 , 9 0, 2, 4, 7, 8, 9 0,2,4,7,8,9

T3

T4 CF1438D

题目大意

  给定一个长度为 n n n 的数列

  给定一个操作,选出 i ≠ j ≠ k i \neq j \neq k i=j=k,然后把 a i , a j , a k a_i, a_j, a_k ai,aj,ak 都赋值成 a i ⊕ a j ⊕ a k a_i \oplus a_j \oplus a_k aiajak

  构造一个操作顺序使得数列中的书全都相等,最大操作次数不得大于 n n n

分析

  仍然可以分奇偶讨论,如果数列长度是奇数的时候,就可以 n 2 \frac n2 2n 把整个数列变成这样:

a , a , b , b , c , c , d , d , ⋯   , x , x , y , y , y a, a, b, b, c, c, d, d, \cdots, x, x, y, y, y a,a,b,b,c,c,d,d,,x,x,y,y,y

  然后再倒着来一遍就把所有数字变成 y y y 就可以了

  然后是偶数的情况。这里我们可以发现,把三个数都变成 a i ⊕ a j ⊕ a k a_i \oplus a_j \oplus a_k aiajak 之后对整个数组的异或和的贡献就是 ( a i ⊕ a j ⊕ a k ) ⊕ ( a i ⊕ a j ⊕ a k ) = 0 (a_i \oplus a_j \oplus a_k) \oplus (a_i \oplus a_j \oplus a_k) = 0 (aiajak)(aiajak)=0,相当于这个操作不会改变这一堆数字的异或和。所以如果这个序列长度是偶数并且最后能弄成全都是一样的的话那么这个序列的异或和必定是 0 0 0

  那么前 n − 1 n - 1 n1 个数我们就可以按照奇数的方法构造,至于最后一个数,因为满足异或和为 0 0 0 所以最后一个数必定和前面弄出来的所有数相等,那就可以不用管它了。

T5 CF1734E

题目大意

  给定质数 n n n 与一个长度为 n n n 的数列 b b b,要求构造一个 n × n n \times n n×n 的矩形 a a a 满足:

  1. a i , j ∈ [ 0 , n ) a_i, j \in [0, n) ai,j[0,n)
  2. ∀ i , a i , i = b i \forall i, a_{i, i} = b_i i,ai,i=bi
  3. ∀ r 1 , r 2 , c 1 , c 2 \forall r_1, r_2, c_1, c_2 r1,r2,c1,c2 不能有 a r 1 , c 1 + a r 2 , c 2 ≡ a r 1 , c 2 + a r 2 , c 1 ( m o d n ) a_{r_1, c_1} + a_{r_2, c_2} \equiv a_{r_1, c_2} + a_{r_2, c_1} \pmod n ar1,c1+ar2,c2ar1,c2+ar2,c1(modn)

分析

  我们发现一件事情,就是加入我们对某一列(这里就假设给 c 1 c_1 c1)的所有数都加上一个数 k k k,那么第三个条件的式子就会变成:

a r 1 , c 1 + k + a r 2 , c 2 ≡ a r 1 , c 2 + a r 2 , c 1 + k ( m o d n ) a_{r_1, c_1} + k + a_{r_2, c_2} \equiv a_{r_1, c_2} + a_{r_2, c_1} + k \pmod n ar1,c1+k+ar2,c2ar1,c2+ar2,c1+k(modn)

  很显然这样的操作对是否满足性质 3 3 3 毫无影响,所以我们可以考虑先不满足性质 2 2 2 最后再考虑每一列的那个数和 b i b_i bi 差多少然后整列减去相差的数就好了。

  现在就考虑怎么满足条件 1 1 1 3 3 3,这个就比较简单了,直接 a i , j = ( i × j )   m o d   n a_{i, j} = (i \times j) \bmod n ai,j=(i×j)modn 就好了,因为:

r 1 c 1 + r 2 c 2 ≡ r 1 c 2 + r 2 c 1 ( m o d n ) → r 1 ( c 1 − c 2 ) ≡ r 2 ( c 1 − c 2 ) ( m o d n ) → r 1 ≡ r 2 ( m o d n ) \begin{aligned} & r_1c_1 + r_2c_2 \equiv r_1c_2 + r_2c_1 \pmod n \\ \to & r_1(c_1 - c_2) \equiv r_2(c_1 - c_2) \pmod n \\ \to & r_1 \equiv r_2 \pmod n \end{aligned} r1c1+r2c2r1c2+r2c1(modn)r1(c1c2)r2(c1c2)(modn)r1r2(modn)

  显然这是不可能的,所以就这样构造就好了。

T6 CF1733C

T7 AGC058A

题目大意

  给定一个 1 ∼ 2 n 1 \sim 2n 12n 的排列 p p p,你可以交换相邻的两个数至多 n n n 次,使得数列满足:

  若 i i i 为奇数,则 p i < p i + 1 p_i < p_{i + 1} pi<pi+1,反之 p i > p i + 1 p_i > p_{i + 1} pi>pi+1

  要求构造出操作序列。

分析

  观察到最大的数必须在偶数位上。于是若最大的数不在偶数位上,将其左/右移一位。然后对于其分隔开的左右区间递归处理即可。我们只对偶数位进行操作,所以次数不超过 𝑛 𝑛 n。也能保证偶数位的数是大于两边的数的,因为每个偶数位放的都是当前区间最大的数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值