CQBZ Weekly Contest

简称:CWC

考得那么差不写总结过不去……


Round  1 \text{Round } 1 Round 1


Score \text{Score} Score

50 + 60 + 100 + 0 + 70 + 3 + 5 = 288 50+60+100+0+70+3+5=288 50+60+100+0+70+3+5=288


Looking Forward \text{Looking Forward} Looking Forward

差。

本来 T1 T2 都是想到的正解,结果因为细节丢了 90 p t s 90pts 90pts……而且居然没有检查出来。

T3 确实挺妙的,可能是我对二分比较熟练。

T4 在考试的时候推得很复杂,就没去想了。最好的办法应该是从头在想一遍。

gm曾说:这次比赛暴露出了很多问题。

比如,对知识点的忘记,板子不会打的离奇情况。

于是 T5 打了个暴力,T7 基本想到正解但是没调对……


Solution \text{Solution} Solution

A A A

一道常规的模拟题,考试的时候花了 30min。

可以先预处理出每一行的单词,再处理空格。

注意:

  • 空格的数量。

  • 最后一行的输出。

B B B

一道基础思维题。

贪心地想,我们尽量一次只去掉一个 1 1 1

最优的情况就是 1 1 1 的个数,设为 x x x

可是不然。需要考虑什么影响了操作。

一次只去掉 1 1 1 1 1 1 显然前提是 在 2 × 2 2\times 2 2×2 的矩阵中,有至少 2 2 2 0 0 0。容易验证。

那么如果只有一个 0 0 0,我们第一次覆盖就是要覆盖 2 2 2 1 1 1,所以答案为 x − 1 x-1 x1

另外一种情况是全部是 1 1 1,同上可推出是 x − 2 x-2 x2

总结一下,本题的主要思路就是:

因为 0 可以扩展,所以只要有一个 2 × 2 2\times 2 2×2 满足则可以推到其他 2 × 2 2\times 2 2×2

C C C

最暴力地,枚举区间左右端点,再对区间进行排序,再进行验证。复杂度为 O ( n 3 log ⁡ n ) O(n^3\log n) O(n3logn)

而我们要优化到 O ( n log ⁡ n ) O(n\log n) O(nlogn) 以下。

这种区间问题,通常的解决方法就是 数学计数 或 一端点+另一点二分。这是题外话。

注意到 “第 k k k 小的数大于等于 x x x”,直接求非常复杂。我们可以把它转换为:最多有 k − 1 k-1 k1 个数小于 x x x

又可以转化为:区间内大于等于 x x x 的数量为 l e n − k + 1 len-k+1 lenk+1

怎么求这个区间范围内的数量呢?自然想到前缀和。

于是现在,对于一个区间 [ l , r ] [l,r] [l,r],我们可以在 O ( 1 ) O(1) O(1) 的时间内判断它的合法性了。但是这样也是 O ( n 2 ) O(n^2) O(n2)

观察样例并思考,发现这玩意具有单调性,满足:

对于固定的 i i i,若 j j j 满足条件,则 [ j + 1 , i − k + 1 ] [j+1, i-k+1] [j+1,ik+1] 都满足条件。

证明:

j j j 变大后。

  • k k k 小数在最前面,即不在新区间内了,则新的第 k k k 小数会变大,由不等式传递性得出正确性。

  • 还没有被去掉。则讨论去掉的数与 k k k 小数的大小关系。若该数小于第 k k k 小数,则同上证法。若大于,则不会影响比它小的数。证毕。

证明了单调性,就可以二分了。

枚举右端点 i i i,二分最小的左端点,然后计算区间的长度即可。时间为 O ( n log ⁡ n ) O(n\log n) O(nlogn)

D D D

首先,我们想让所有段的长度为 1 1 1

随后任何的更改操作,都可以看作是取反。

我们需要取反一些数使之和 0 0 0

这里的取反,指的是对于 i i i i + 1 i+1 i+1,通过取区间 [ i , i + 1 ] [i,i+1] [i,i+1] 使 i + 1 i+1 i+1 − - 变为 + + + 得到。

所以如果 i + 1 i+1 i+1 要取反,那么 i i i 就一定不能取反。

无解好判断,当所有 1 1 1 − 1 -1 1 的数量为单数时,无论怎么变都变不到 0 0 0

E E E

线段树板子。

F F F

d p i , j , 0 / 1 / 2 dp_{i,j,0/1/2} dpi,j,0/1/2 表示当前节点为 i i i,当前子树中有 j j j 个颜色 K K K i i i 的颜色小于/等于/大于 K K K 的方案数。

初始化: d p i , 0 , 0 = k − 1 , d p i , 1 , 1 = 1 , d p i , 0 , 2 = m − k dp_{i,0,0}=k-1,dp_{i,1,1}=1,dp_{i,0,2}=m-k dpi,0,0=k1,dpi,1,1=1,dpi,0,2=mk

c r < K c_r<K cr<K 时,子树随便怎么选。

d p i , j , 0 = ∑ t o d p i , j − k , 0 × ( d p t o , k , 0 + d p t o , k , 1 + d p t o , k , 2 ) dp_{i,j,0}=\sum _{to} dp_{i,j-k,0}\times(dp_{to,k,0}+dp_{to,k,1}+dp_{to,k,2}) dpi,j,0=todpi,jk,0×(dpto,k,0+dpto,k,1+dpto,k,2)

c r = K c_r=K cr=K 时,儿子节点要小于 K K K

d p i , j , 1 = ∑ t o d p i , j − k , 1 × d p t o , k , 0 dp_{i,j,1}=\sum _{to} dp_{i,j-k,1}\times dp_{to,k,0} dpi,j,1=todpi,jk,1×dpto,k,0

c r > K c_r>K cr>K 时,儿子节点不能选 K K K

d p i , j , 2 = ∑ t o d p i , j − k , 2 × ( d p t o , k , 0 + d p t o , k , 2 ) dp_{i,j,2}=\sum _{to} dp_{i,j-k,2}\times( dp_{to,k,0}+dp_{to,k,2}) dpi,j,2=todpi,jk,2×(dpto,k,0+dpto,k,2)

转移中要用到 d p i dp_i dpi,并且是之前的还没有考虑当前子树的 d p i dp_i dpi,而转移过程中, d p i dp_i dpi 的值会被改变且重复利用,所以,我们需要一个另外的数组暂时用来记录转移的答案,转移完后再复制给 d p i dp_i dpi。这样就解决了有后效性的问题

G G G

首先,一定不选割点。

每个点双肯定只选一个且最小。

走到最后的时候,必然剩下一个点双,而这个点双友其它点双的点经过割点到达,所以这一个点双就可以不安排。

我们可以用总共的最小值和减去度数为 1 1 1 的最大的值。


Round 2 \text{Round 2} Round 2


Score \text{Score} Score

真实分未知。

估: 69 + 100 + 100 + 70 + 0 + 22 = 361 69+100+100+70+0+22=361 69+100+100+70+0+22=361


Looking Forward \text{Looking Forward} Looking Forward

T1 又粗心了。

T4 没有考虑溢出。

T5 和 T6 都没有认真去想。

比上一次好了很多。 ?

对于难题不能畏惧。勇敢去做。

千万不要以为把前面简单题拿稳就可以了,况且你还不能保证拿稳……


Solution \text{Solution} Solution

A A A

先确定每个数字代表的方向,共 24 24 24 种。

然后跑一遍即可。

B B B

定义 d p i dp_i dpi 表示到达第 i i i 列的方案数。分类讨论。

  • 当前为竖着的。

    • 前面也是竖的: d p i = 2 d p i − 1 dp_i=2dp_{i-1} dpi=2dpi1
    • 前面是两个横: d p i = d p i − 1 dp_i=dp_{i-1} dpi=dpi1
  • 当前为横着的左边。

    • 前面是竖的: d p i = 2 d p i − 1 dp_i=2dp_{i-1} dpi=2dpi1
    • 前面两个横: d p i = 3 d p i − 1 dp_i=3dp_{i-1} dpi=3dpi1,此处需要注意。
  • 当前为横着的右边。 d p i = d p i − 1 dp_i=dp_{i-1} dpi=dpi1

C C C

考虑最小且不出现,尽可能考虑 0 0 0

贪心地把 0 0 0 和其他数隔一个摆放。如果数量够答案为 0 0 0

否则,已经有了 0 0 0。考虑将所有的 0 0 0 放在最右边。其他的放左边。

这样如果不全是 1 1 1,那么答案就是 1 1 1。如果全是 1 1 1,则必然有一个 1 1 1 0 0 0 结合形成 1 1 1。为了避免 2 2 2,则需要间隔摆放,为 2 2 2

D D D

数学题。

首先,一个重要的转化:

888...888 = 8 9 × 999...999 = 8 9 ( 1 0 x − 1 ) 888...888=\dfrac{8}{9}\times 999...999=\dfrac{8}{9}(10^x-1) 888...888=98×999...999=98(10x1)

其中 x x x 表示位数。

L ∣ 8 9 ( 1 0 x − 1 ) L \mid \dfrac{8}{9}(10^x-1) L98(10x1)

9 L ∣ 8 ( 1 0 x − 1 ) 9L \mid 8(10^x-1) 9L8(10x1)

d = ( 8 , L ) d=(8,L) d=(8,L)

9 L d ∣ ( 1 0 x − 1 ) \dfrac{9L}{d} \mid (10^x-1) d9L(10x1)

1 0 x ≡ 1 ( m o d 9 L d ) 10^x \equiv 1 \pmod {\dfrac{9L}{d}} 10x1(modd9L)

引理:欧拉定理

( a , m ) = 1 (a,m)=1 (a,m)=1 a φ ( m ) ≡ 1 ( m o d m ) a^{\varphi(m)} \equiv 1 \pmod m aφ(m)1(modm)

所以我们只需要令 y = φ ( 9 L d ) y=\varphi(\dfrac{9L}{d}) y=φ(d9L),找到那个最小的 x ∣ y x \mid y xy 即为答案。

快速幂会爆 long long,记得开龟速乘。


E E E

对于此类删除的题,常见的转化思路是倒着来,改删除为添加。

按照边的权值从大到小排序。

每次对于一条边 ( x , y ) (x,y) (x,y),判断 x , y x,y x,y 是否已经联通。

若没有联通:

  • 添加这条边

  • 计算这条边对答案的贡献。设 s i s_i si 表示联通块 i i i 的大小,则这条边使得 x , y x,y x,y 各自的 s x , s y s_x,s_y sx,sy 个点两两之间联通。 即 s x × s y s_x\times s_y sx×sy 个点对。

权重?添加这条边后,两块联通。说明删掉这条边后刚好断开,前面还删除了比它权值小的边。所以边权应该是小于等于当前边权的边的边权和。可以用前缀和。

所以这条边对答案的贡献为 s x × s y × p r e v s_x\times s_y\times prev sx×sy×prev

联通和块长可以用并查集维护。

F F F

一眼数论,但并不是这样。

对于均为奇数的 a i , a j a_i,a_j ai,aj,各自加一后同为偶数,则满足条件。偶数同理。

所以:奇数和奇数可以选,偶数和偶数可以选,奇数和偶数看情况。

很容易联系到图。并且分为奇数和偶数,奇数各不影响,偶数同理,就是一个二分图。

于是:对于奇数的 a i a_i ai,将其放入左部;偶数放入右部。为了使左右两部内部没有边,于是考虑反着建:将不满足条件的,即 ( a i , a j ) ( a i + 1 , a j + 1 ) = 1 (a_i,a_j)(a_i+1,a_j+1)=1 (ai,aj)(ai+1,aj+1)=1 的进行连边。

最终求出最小独立集即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值