CF 969 Div2

CF 969 Div2

A

  • 题意:

    给定区间 [ l , r ] [l,r] [l,r],每次删除三个数 a , b , c a, b, c a,b,c,要求这三个数字两两互质,求最多删除几次

  • 题解:

    每次删除连续的三个数,要求第一个数是奇数即可

B

  • 题意:

    有一个数组 A A A,每次操作对在值域 [ l , r ] [l,r] [l,r] 的数字加一或者减一,要求每次操作后输出整个数组的最大值

  • 题解:

    每次操作不会改变整个数组的最大值的位置,只需要维护最大值即可

C

  • 题意:

    给定一个数组 A A A 和两个整数 a a a b b b,每次可以选取数组中的某个元素加 a a a 或加 b b b,求最终数组 m a x − m i n max-min maxmin 的最小值

  • 题解:

    因为 s a + t b sa+tb sa+tb 的正整数最小值是 gcd ⁡ ( a , b ) \gcd(a,b) gcd(a,b),所以可以直接把操作看成对某个元素 + g c d ( a , b ) +gcd(a,b) +gcd(a,b) 即可

    将每个 A i   m o d   gcd ⁡ ( a , b ) A_i \bmod \gcd(a,b) Aimodgcd(a,b) 放入一个 s e t set set 中,然后每次令 s e t set set 的最小值加上 gcd ⁡ ( a , b ) \gcd(a,b) gcd(a,b) 变成最大值后,再次去求整个数组中的极差,重复操作 n n n 次就行

D

  • 题意:

    给定一颗有根树,每个节点有 01? 三种权值, AliceBob 轮流将每个 ? 节点填入 01

    s s s 是一个字符串,若 s s s0110 的个数相等,这个字符串算是好字符串。对于这棵树上每条根到叶子的字符串,Alice 想要最大化这些字符串中好字符串的数量而Bob 想要最小化。求两人在最优策略下,最终好字符串的数量。

  • 题解:

    如果一个字符串开头和结尾的字符一样,那么这个字符串就是好字符串

    只有根节点和叶子节点是有用的

    如果根节点不是 ?,直接填叶子节点,Alice 想要和根节点一样,Bob 想要不一样

    如果根节点是 ?,考虑所有叶子节点 0 还是 1

    如果某个元素多的话,Alice 首先将根节点填上某个颜色,之后依次填即可

    如果叶子节点 01 一样多的话,就是最后填根节点了

    注意,如果叶子节点 ? 是奇数个的话,AliceBob 需要去竞争谁最后去填写根节点的值

    具体细节看代码

  • code

E

  • 题意:

    给定一棵树,书上节点编号满足 dfs序

    现在知道所有边的总权值 w w w d i s ( i , i + 1 ) dis(i,i+1) dis(i,i+1) 表示节点 i i i 到节点 i + 1 i+1 i+1 的路径权值可能的最大值,初始每一条边的权值都不知道,每次会确定一条边的权值,求 ∑ i = 1 n d i s ( i , i + 1 ) \sum\limits_{i=1}^n dis(i,i+1) i=1ndis(i,i+1)(权值确定后不会撤回)

  • 题解:

    考虑每次确定一条边会发生什么

    如果节点 i i i i + 1 i+1 i+1 经过这条边,这条边如果是最后一条没确定的边,那么 d i s ( i , i + 1 ) dis(i,i+1) dis(i,i+1) 就确定了

    否则 d i s ( i , i + 1 ) dis(i,i+1) dis(i,i+1) 一定是 w − v a l w-val wval,其中 v a l val val 是所有确定边的权值和

    直接模拟即可

  • code

F

  • 题意:

    假如有一个集合 S S S,每次可以选出奇偶性相同的 S i S_i Si S j S_j Sj,然后将 S i + S j 2 \frac{S_i+S_j}{2} 2Si+Sj 插入集合

    考虑数组 A A A,有多少连续子数组可以经过如上方法扩展成为连续的

  • 题解:

    假设一个集合 { x , y } \{x,y\} {x,y},一定会扩展为一个等差数列,公差是 y − x gcd ⁡ ( y − x , 2 ∞ ) \frac{y-x}{\gcd(y-x,2^{\infty})} gcd(yx,2)yx

    对于有序集合 { x , y , z } \{x,y,z\} {x,y,z},因为 { x , y } \{x,y\} {x,y} { y , z } \{y,z\} {y,z} { x , z } \{x,z\} {x,z} 都会形成等差数列,所以最后公差为 g c d ( y − x , z − y ) gcd ⁡ ( gcd ⁡ ( y − x , z − y ) , 2 ∞ ) \frac{gcd(y-x,z-y)}{\gcd(\gcd(y-x,z-y),2^{\infty})} gcd(gcd(yx,zy),2)gcd(yx,zy)

    问题转化为,原数组的差分数组,每个元素除以其与 2 ∞ 2^{\infty} 2 gcd ⁡ \gcd gcd 后,有多少连续子段的 gcd ⁡ \gcd gcd 1 1 1

    可以 dp d p i , j dp_{i,j} dpi,j 表示以 i i i 为结尾, gcd ⁡ \gcd gcd j j j 的方案数,其中 j j j 可取的值只有 log ⁡ 2 n \log_2 n log2n

  • code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值