Codeforces Round #847 (Div. 3) A-F 冲蓝名场

想上蓝名,赛前1414分,目标蓝名。
u p d a t e update update赛后排名 57 57 57

A. Polycarp and the Day of Pi
题意 给你一个数字判断该数字是否和圆周率的前30位匹配。
思路 发现样例有一个长度为30为的数, c t r l + c v ctrl + c v ctrl+cv一下,暴力判断即可。
代码

B. Taisia and Dice
题意 给你 n n n个骰子,当前 n n n个骰子的总得分为 s s s,去掉一个分数最大的骰子得分为 t t t,构造这 n n n的骰子的得分,得分<= 6 , n < = 50 n <= 50 n<=50
思路 容易发现最大值为 s s s - t t t,现判断所有骰子都为最大得分能否组成 s s s,再暴力一层一层的把得分分配给剩下的 n − 1 n-1 n1个骰子。
代码

C. Premutation
题意 给你一个排列数组 p p p,然后给你 n n n个数组,每个数组分别为排列 p p p去掉第 i i i p i p_i pi后的数组,通过这 n n n个数组反推排列数组 p p p ( 3 ≤ n ≤ 100 ) (3≤n≤100) (3n100),去掉的项的下标不保证有序,但保证是个排列。

在这里插入图片描述
思路 统计每个值在 n n n个数组出现的下标和,排序即可。
代码

D. Matryoshkas
题意 给你一个数组 a i a_i ai,我们把连续序列成为该序列是连续的数字组成,问你这个数组能由多少个连续序列组成, n < = 2 e 5 n <= 2e5 n<=2e5
样例

6
2 2 3 4 3 1
2

样例解析:可以分解为 [ 1 , 2 , 3 , 4 ] [1 , 2 , 3 , 4] [1,2,3,4] , [ 2 , 3 ] [2 , 3] [2,3]
思路 暴力模拟即可,从小到大枚举所有首项,并截取下来最长的连续序列,统计个数即可。
代码

E. Vlad and a Pair of Numbers
题意 问你是否存在两个数,给定一个 x x x,满足 x = = ( a + b ) / 2 = = ( a x == (a + b) / 2 == (a x==(a+b)/2==(a^ b ) b) b) , 不是下取整,是整除2 , 取值范围 a 、 b < = 2 2 a 、b <= 2^2 ab<=22 9 ^9 9
思路 赛时考虑 ( a + b ) / 2 = = ( a (a + b) / 2 == (a (a+b)/2==(a ^ b ) b) b)这个式子什么时候成立,考虑第 k k k位,如果第 k k k位为1,我们发现只有一个为1才能保证异或为1,要满足 ( a + b ) / 2 (a + b) / 2 (a+b)/2为1,加号再除以2需要两个1才能保证第 k k k位位1,那我们如何去构造一个1呢,我们可以考虑借低位的1去构造一个高位的1,这就要求低位不能为0,并且低位只能为两个1,然后构造出来了一个高位的1,第 k k k位 为0,默认看成都为0即可 。
代码

做到 e e e只用了半小时, A − E A-E AE是比较偏 e d u edu edu的简单题,绝大部分小白能够做出 d , e d,e d,e部分,能力较强的可以在 d i v 3 div3 div3只做出前五道就可以拿到不错的名次,是一个很好的上分场。

F. Timofey and Black-White Tree
题意 给你一个大小为 n n n的树,最开始 c 0 c0 c0点为黑色,然后执行 m m m次操作,每次操作把一个点染成黑色,每次染色后问你所有黑色点对之间的最小距离。
思路 赛时用了一个树剖+线段树的方法去做的,思路是考虑维护两种关系一个是加了这个点,答案在这个新加的点到这个点所在子树的黑点的之间的最短距离,用dfs维护线段树维护。第二个是考虑不在这个子树的影响,答案肯定是 d [ u ] + d [ v ] − 2 ∗ d [ l c a ( u , v ) ] d[u] + d[v] - 2 * d[lca(u , v)] d[u]+d[v]2d[lca(u,v)],我们维护后面的 d [ v ] − 2 ∗ d [ l c a ( u , v ) ] d[v] - 2 * d[lca(u,v)] d[v]2d[lca(u,v)],我们发现 l c a ( u , v ) lca(u , v) lca(u,v)一定是 u u u的祖先,我们考虑维护 v v v节点到根的路径所有的 d [ v ] − 2 d [ t ] d[v] - 2d[t] d[v]2d[t]的最大值, t t t v v v的祖先,然后 u u u, v v v l c a lca lca一定是两条到根路径的最大深度的交集。
赛后知道有一个更简单的 n s q r t ( n ) nsqrt(n) nsqrt(n)的做法,是一个 d f s dfs dfs的非常有用的暴力,该做法在后续中更新。
代码

今天的div3 的 F是个人类妙妙题,爆杀了我这种没脑子的蒟蒻。

U p d a t i n g Updating Updating
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_52358098/article/details/128783430