https://codeforces.com/gym/102916
B
给出N 组 x1 y1 x2 y2,每组选一对x y使得
∑
x
∑
y
\frac{ \sum x}{\sum y}
∑y∑x最大
二分答案然后选更大的即可
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<点,父亲> 】 表示 每个点 以哪一个点作为父亲
值是一个三元组表示值域 以及子树递归后是否合法