Rank | Solved | A | B | C | D | E | F | G | H | I | J | K |
---|---|---|---|---|---|---|---|---|---|---|---|---|
40/113 | 2/11 | Ø | . | . | O | Ø | . | . | O | Ø | Ø | . |
O
: 当场通过
Ø
: 赛后通过
.
: 尚未通过
A 矩阵乘法
upsolved by chelly
chelly's solution
B 字符串的幂
unsolved
C 生命游戏
unsolved
D 数格点
unsolved
E 数据排序
upsolved by chelly
chelly's solution
dp[S]表示已经取了S这个集合里的元素作为最大的|S|个评分,然后枚举子集表示下一次取的那些相同评分的元素
时间复杂度(O(n imes 3^n))
F 平衡二叉树
solved by chelly
chelly's solution
f(i)和g(i)分别表示高度为i的子树,高度差不超过d的情况下,子树的点数最大值/最小值
f(i)显然是(2^i-1),g(i)可以通过递推得到
G 数组合并
unsolved
H 卡牌游戏
solved by ch
ch's solution
I 游戏
upsolved by chelly
chelly's solution
首先最暴力的思路就是一个带删除的并查集,但是考虑一个度数很大的点不断的上下线,如果每次都去遍历它的相邻点去合并显然会超时。
考虑big small
对于度数>=sqrt(m)的点,我们称其为大点,否则我们称其为小点
对于小点,我们可以遍历它的所有相邻节点,对于大点,我们就需要考虑考虑如何处理了
显然大点的数量不会超过sqrt(m),对于每个大点,我们去用队列记录它在离线时候收到的组队请求
对于一个新上线的大点,首先我们将其恢复到它上次离线时候的集合,然后遍历它收到的组队请求进行合并
这样复杂度就是(O(m^{frac{3}{2}}+n))
J 魔法阵
upsolved by chelly
先二分答案r变成一个判定问题,现在问题变成了有三个半径都是r的圆A,B,C,能否从每个圆里面各点一个点,使得这三个点形成一个等边三角形
我们可以以A为中心,将B转动60°到B',判断以B'为圆心,2r为半径的圆与以C为圆心,r为半径的圆是否有重叠部分即可
注意旋转60°有两个方向
K 排队
unsolved
Replay
本场由chelly、ch线下打的。
开场chelly过了F题的签到,然后发现其它题不太可做的样子……?ch则一直在搞H,但搞来搞去发现样例搞不出来,卡了一下午……后来得知题面叙述有问题……也是很无奈