Samara Farewell Contest 2020 (XXI Open Cup, GP of Samara) 部分题解

https://codeforces.com/gym/102916
B
给出N 组 x1 y1 x2 y2,每组选一对x y使得 ∑ x ∑ y \frac{ \sum x}{\sum y} yx最大

二分答案然后选更大的即可

C
给定一幅 n × m 的地图,地图由“.”和“#”构成,“.”表示空地,“#”表示障碍。
求这个地图沿垂直和水平方向分别 shift 多少,能使空地形成一个连通块。求出所有可能的 shift 方案。

枚举上下shift的步数,左右只需维护一个前后缀的并查集即可
详见https://blog.csdn.net/rzO_KQP_Orz/article/details/113763581

D
N堆金币,两个海盗轮流拿,一个清醒一个醉酒,
清醒的每次拿最多的一堆,醉酒在剩下的金币随机拿,问两人期望拿多少金币

概率DP
考虑反过来放黑白球
f【i】【j】表示已经放了i个球从左到右第j个为黑色的概率
详见https://www.cnblogs.com/studyshare777/p/14381755.html

G 签到题
J
一个岛上有N种颜色眼睛的人,每种有ai个,每个人知道自己眼睛颜色后会自杀,一开始大家只知道有N种颜色和其他人眼睛颜色,不知道每种颜色有没有人
一个旅行家来到岛上说了N句真话:岛上至少有bi个人眼睛是i颜色的
问最后会有多少人自杀,以及最后一天有人自杀是哪一天

bi=0的人数大于等于2 的话,bi>0对应的人会在di =ai -bi +1天自杀
bi=0的人数等于1时,最后这群人会在其他颜色的人自杀后意识到自己眼睛颜色然后自杀
bi=0的人数等于0时,最后这群人同上会提前自杀

在这里插入图片描述
K
一个吸血鬼有M滴血的上限,一开始满血,每秒钟会掉一滴血,且可以对一个怪物造成1点伤害
有N个怪物,每个怪物有 hi滴血,击杀一个怪物后可以回复ti滴血,但是不能超过上限,
问是否可以击杀所有怪物

首先我们有 t =min(t,m)
将怪物分为两类 
h<t  当成血包来看 那么可以直接将血上限 +  (t-h) 所以按照h从小到大杀
h>t  考虑i j两个怪物先后杀的顺序,会导致最低的血量不同,写一下式子,发现先杀回复量大的怪即可
所以排序后先杀第一种再杀第二种即可

L
给出一个长度为N的序列,值域为【1,K】
要求删去最少的数后使得不存在长度为K的上升子序列

f【i】【j】表示到第i位,上升子序列长度为j的序列不存在,最少删除次数
设a【i】=x
则f【i】【x】=min{f【i】【x-1】,f【i】【x】+1}
我们发现每次最多只有一位产生变化
记录一下输出方案时反过来跑一边即可

M
给出一颗树,问有哪些点可以作为二叉搜索树的根

显然可以树D 算出每个节点子树的值域 
然后up down 一下就行了
树D貌似比较难写
可能改成记搜的版本会好点
状态f【pair<点,父亲> 】 表示  每个点 以哪一个点作为父亲 
值是一个三元组表示值域 以及子树递归后是否合法
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值