Northern Eurasia Finals Online 2020 部分 题解

补题:
https://codeforces.com/group/wmhDiB5PTN/contest/313189
题面
https://assets.codeforces.com/rounds/102896/nerc2020-statements.pdf

A
定义“Almost Balance Tree” 为一颗二叉树,
满足左右儿子的重量差不超过1,
给出A个1 B个2要求构造出合法的二叉树,无解输出-1

显然有,在2的数量一定的前提下,1越多就越有可能可以得到合法的树。
我们可以先算出在总和S=A+B*2的前提下,最少需要多少个1
那么令f[S]表示S最少需要的1个数,
考虑根为1、2进行转移
1:1+f【up(s-1)】+f【down(s-1)】
2:  f【up(s-2)】+f【down(s-2)】
其中up(x)表示 floor(x/2)  down(x)表示ceil(x/2)
那么只要1的个数足够,我们可以按照上述过程递归构造即可
注意特判边界,比如当前是全部为1可以直接构造等

C
一颗节点数 ≤ 20 \leq 20 20的树,一开始只有根节点染了色,
每次操作可以将一个点颜色取反,
要求操作完是染色部分是一个包含根的连通块
问最多可以进行多少次操作,

假如一个节点只有一个儿子,那么显然方案唯一
如果有两个儿子,我们一定可以遍历两个子树的所有情况
不妨设两个子树的状态分别为s1,……sn ,t1,……tm
则可以这样走
(s1,t1)->(s1,t2)->……(s1,tm)->(s2,tm)->……(sn,tm)或(sn,t1)
所以我们一定可以遍历所有情况
递归构造一下即可

D
给出N级台阶,每个台阶可以走到自己下面八级台阶的某些位置
第T天只可以走前T级台阶,问每一天两个人玩轮流走走不了的人输的游戏胜负情况

相当于一个有向图上的博弈,每次会往后面加点
显然我们如果确定一个点的后续状态的胜负状态
那么也可以确定该点的胜负情况
那么我们可以用f【x】【mask】表示
x级台阶后面八级台阶的胜负状态为mask时的状态
每次处理出最后八级台阶的胜负状态
往回递推,记搜即可

E

签到题,推式子即可

G
在这里插入图片描述

给出一个平面内的杨辉三角形,求一个三角形内部的数之和

枚举行n的话,相当于是求一段区间C(n,i)
发现相邻行之间可以转移
直接暴力算即可

K

签到题

L
在这里插入图片描述

给出一颗二叉搜索树,以及查找值域在【L,R】元素个数的函数,
每次询问给出【L,R】,问该函数调用次数

在这里插入图片描述

如上图所示,
红色为与区间【L,R】无相交的节点,
绿色为被区间【L,R】覆盖的节点
所以我们只要找到被包含的最靠左、右的蓝色节点即可
然后答案为2*(d【A'】+d【B'】-d【C'】)+1
其中A'、B'为上图左右两端的蓝色节点
C'为A'、B'的LCA

M

签到题,有向图最长路径
记搜即可
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值