10.19 做题记录

概况

完成 cf 难度总和: 2000 + 2300 + 2000 + 2300 + 1200 + 2000 + 2800 + 2400 + 1800 + 2200 = 21000 2000+2300+2000+2300+1200+2000+2800+2400+1800+2200=21000 2000+2300+2000+2300+1200+2000+2800+2400+1800+2200=21000

被 wyq ≈ 20000 ≈ 20000 20000 吊打

简要题解

CF920F

简单ds题,方法和区间开平方根差不多。每个数进行不了几次操作。于是我们维护区间和和区间 max ⁡ \max max。如果区间 max ⁡ ≤ 2 \max\leq 2 max2 那么不用修改了。并且我们只要 O ( x ln ⁡ x ) O(x\ln x) O(xlnx) 预处理 d ( x ) d(x) d(x) 即可

CF785D

首先我们考虑对于每个 ( 分别计算贡献,假设这之前有 n n n( 后面有 m m m),那么对于这个 ( 的贡献即为 ∑ i = 1 min ⁡ ( n , m ) C n − 1 i − 1 × C m i \sum\limits_{i=1}^{\min(n,m)}C_{n-1}^{i-1}\times C_{m}^{i} i=1min(n,m)Cn1i1×Cmi。然后通过看题解知道这个等效于 C n + m − 1 n C_{n+m-1}^{n} Cn+m1n

CF353D

这道题目的思想和 CF622E 挺像的。我们考虑设 f i f_i fi 表示到第 i i i 个人最少需要交换几次(保证前 i i i 个操作完已经排列完成)。于是 f i = max ⁡ ( f i − 1 + [ i − l a ≤ g s − 1 ] , i − g s ) f_i=\max(f_{i-1}+[i-la\leq gs-1],i-gs) fi=max(fi1+[ilags1],igs),其中 l a la la 表示上个 F 出现的位置, g s gs gs 表示当前有 F 的个数。时间复杂度 O ( n ) O(n) O(n)

CF79D

这道题目想到了还挺好写的。我们考虑异或差分,假设 n n n 个灯泡的状态为 1011 那么差分后即为 11101。于是假设我们翻转 [ l , r ] [l,r] [l,r] 这段区间相当于差分数组的 c f l cf_{l} cfl c f r + 1 cf_{r+1} cfr+1 进行去翻即可。

差分数组 1 的个数肯定 ≤ 20 \leq 20 20。于是我们考虑状压dp。设 f i f_i fi 表示到达状态 i i i 的最少操作数,状态 i i i 若第 j j j 位为 1 1 1 相当于把第 j j j 盏灯打开的最小次数。转移很简单 f i = min ⁡ A ∈ i , B ∈ i ( f i ⊕ A ⊕ B + g A , B ) f_{i}=\min\limits_{A∈i,B∈i}(f_{i\oplus A\oplus B}+g_{A,B}) fi=Ai,Bimin(fiAB+gA,B) g i , j g_{i,j} gi,j 表示 [ i , j ] [i,j] [i,j] 区间除了 i , j i,j i,j 改变状态其余不改变状态的最小次数。这个可以用 bfs 预处理。

CF1369E

我们考虑每个人都全选,如果还存在一种食物没被吃完那么有这个物品的人肯定不会吃 Leo 。于是我们把拥有那些食物的人放到最后即可,对他要求的另一个菜补回来,不停地操作相同的操作直到没有菜为止。

CF590C

01bfs模板题,由于只有 3 个种国家。我们于是记 d k = [ 1 / 2 / 3 ] , i , j d_{k=[1/2/3],i,j} dk=[1/2/3],i,j 表示 k k k 国度到第 ( i , j ) (i,j) (i,j) 最短距离。那么答案即 min ⁡ i , j ( d 0 , i , j + d 1 , i , j + d 2 , i , j − 2 × [ a i , j = \min_{i,j}(d_{0,i,j}+d_{1,i,j}+d_{2,i,j}-2\times[a_{i,j}= mini,j(d0,i,j+d1,i,j+d2,i,j2×[ai,j=. ] ) ]) ])

01bfs 一般处理边权 [ 0 , 1 ] [0,1] [0,1] 的 bfs。每次取队首元素,对于每次能松弛的操作如果为同一个 level 把他放到队首否则放到队尾。

猜你喜欢

转载自blog.csdn.net/wangyiyang2/article/details/109166091