Codeforces 1214 简要题解

文章目录


比赛传送门

A

发现就是求 min ⁡ { [ n − d   x − 5 e   y ≥ 0 ] n − d   x − 5 e   y } \min\{[n-d\ x-5e\ y\ge0]n-d\ x-5e\ y\} min{[nd x5e y0]nd x5e y}
考虑到 n n n 很小于是可以暴力枚举
CODE

B

题意读错调了一年 n m s l nmsl nmsl
A n s = ∑ i ≤ a   j ≤ b   i + j = = n 1 Ans=\sum\limits_{i\le a\ j\le b\ i+j==n}1 Ans=ia jb i+j==n1
CODE

C

随便写个栈维护一下左右括号就能判断合法性
CODE

D

考虑到答案 ≤ 2 \le2 2
于是特判 0 0 0
然后做个傻子 d p dp dp 判割点 ,这个可以这样判: ( 1 , 1 ) → ( i , j ) 方 案 数 ∗ ( i , j ) → ( n , m ) 方 案 数 = ( 1 , 1 ) → ( n , m ) 方 案 数 (1,1)\rightarrow(i,j)方案数*(i,j)\rightarrow(n,m)方案数=(1,1)\rightarrow(n,m)方案数 (1,1)(i,j)(i,j)(n,m)=(1,1)(n,m)说明这个 ( i , j ) (i,j) (i,j) 是割点
然后可以多取两个模数防止被卡
然后我个智障随机乱按了两个2e9的模数家反函数爆int了还能pp
然后我个智障随机乱按了两个2e9的模数家反函数爆int了还能pp
然后我个智障随机乱按了两个2e9的模数家反函数爆int了还能pp
CODE

E

一道比较傻的构造
考虑把奇数搞成一条链,先不确定点标号顺序,然后把所有点对按照 d i s dis dis 从大到小排序,一对对加进去,这样满足了 d i s t dist dist 的单调性就能利用奇数 n n n 个点的链随便构造了
CODE

F

简单构造
考虑到下面这个贪心一定是对的:
我们先把 a , b a,b a,b 两个数组从小到大排序
A n s = min ⁡ Δ { ∑ i = 1 n d i s t ( a i , b ( i + Δ ) % n ) } Ans=\min\limits_{\Delta}\{\sum\limits_{i=1}^ndist(a_i,b_{(i+\Delta)\%n})\} Ans=Δmin{i=1ndist(ai,b(i+Δ)%n)}
其它情况可以发现把逆序交换会更优
然后考虑怎么维护这个玩意儿,我们把 a , b a,b a,b 两个数组的贡献分开算:
b i b_i bi 为加上偏移量之后的 b b b 数组第 i i i 个的值,有如下四种情况:

  1. a i ≤ b i , b i − a i ≤ a i + m − b i a_i\le b_i,b_i-a_i\le a_i+m-b_i aibi,biaiai+mbi ,此时 a i a_i ai 贡献为 − a i -a_i ai b i b_i bi 贡献为 b i b_i bi
  2. a i ≤ b i , b i − a i > a i + m − b i a_i\le b_i,b_i-a_i>a_i+m-b_i aibi,biai>ai+mbi ,此时 a i a_i ai 贡献为 a i + m a_i+m ai+m b i b_i bi 贡献为 − b i -b_i bi
  3. a i > b i , a i − b i ≤ b i + m − a i a_i>b_i,a_i-b_i\le b_i+m-a_i ai>bi,aibibi+mai ,此时 a i a_i ai 贡献为 a i a_i ai b i b_i bi 贡献为 − b i -b_i bi
  4. a i > b i , a i − b i > b i + m − a i a_i>b_i,a_i-b_i>b_i+m-a_i ai>bi,aibi>bi+mai ,此时 a i a_i ai 贡献为 − a i -a_i ai b i b_i bi 贡献为 b i + m b_i+m bi+m

然后发现对于固定的 a i a_i ai ,满足四种限制的 b b b 的位置都是连续的
并且对于固定的 b i b_i bi ,满足四种限制的 a a a 的位置都是连续的
这样可以利用下标关系用差分来更新分别更新几段 Δ \Delta Δ 的和
CODE

G

我们对每一行搞一个 b i t s e t bitset bitset ,记为 v a l i val_i vali
考虑当 ∃ a , b   s . t .   ( v a l i ∣ v a l j ) ̸ = v a l i & & ( v a l i ∣ v a l j ) ̸ = v a l j \exists a,b\ s.t.\ (val_i|val_j)\not=val_i\&\&(val_i|val_j)\not=val_j a,b s.t. (valivalj)̸=vali&&(valivalj)̸=valj
这个东西怎么维护呢?
发现有传递性,即如果 v a l a ∣ v a l b = v a l b , v a l b ∣ v a l c = v a l c ⇒ v a l a ∣ v a l c = v a l c val_a|val_b=val_b,val_b|val_c=val_c\Rightarrow val_a|val_c=val_c valavalb=valb,valbvalc=valcvalavalc=valc
于是只要按照某种偏序关系排序就能判出有没有合法答案存在,考虑到 v a l a ∣ v a l b = v a l b val_a|val_b=val_b valavalb=valb 有一个充要条件是 v a l a val_a vala 1 1 1 的个数不超过 v a l b val_b valb 1 1 1 的个数,于是用一个 s e t set set 把每一行按照里面 1 1 1 的个数排序即可维护所有行的包含关系
CODE

H

先判掉二分图染色的情况
然后把直径找出来,将其从一端开始按照 1 , 2 , 3 , . . . , k , 1 , 2 , 3 , . . . , k 1,2,3,...,k,1,2,3,...,k 1,2,3,...,k,1,2,3,...,k 的顺序染色,然后对于直径的其余子树的最深点我们进行如下判断:
如果它到直径两端的距离均 &lt; k &lt;k <k ,那么继续按照父亲传下来的顺序染色即可
如果它到直径两端的距离均 ≥ k \ge k k ,那么一定非法
否则一定可以合法构造方案,考虑按照距离更大的一端的顺序染色
即如果从该子树最深点到根距离更远,我们按照 c o l u r i = c o l o r f a + 1 colur_i=color_{fa}+1 coluri=colorfa+1 的顺序染色,否则按照 c o l o r i = c o l o r f a − 1 color_i=color_{fa}-1 colori=colorfa1 的顺序染色,这里的加减法均对 k k k 进行取模
CODE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值