A. Eddy Walker
solved by rdc 202min -1
题意 一个点在长度为 (n) 的环上游走,输出第一次访问到所有点时在 (x) 上的概率。
做法 考虑经典的线段上随游走问题,数轴上有 (x=0) 的 (A) 点,与 (x=n) 的 (B) 点,那么位置为 (i) 的点被 (B) 吸附的概率为 (frac{i}{n}),分两次考虑,先以 (m-1),(m+1) 为壁做随机游走,再以 (m-1 or m+1) 和 (m) 为壁做随机游走。
B. Eddy Walker 2
solved by rdc 262min -1
题意 一个点在数轴上,每次往前随机跳 1 到 (k) 步。求能到达 (x) 的概率 (p(x)),以及 (x) 趋于正无穷时 (p(x))。
做法
- 当 (x) 不为正无穷时,(p(x)) 可由线性递推得出,施展 BM。
- 否则,注意到跳 (a) 步,移动距离的期望为 (frac{(k+1)a}{2}),因此 $${lim_{x o +infty}}p(x)=frac{2}{k+1}$$ (我觉得我在口胡)
C. Go on Strike!
D. Kth Minimum Clique
solved by F0_0H 230min -6
题意 给定一个带点权简单图,求点权和第(k)小的完全子图
题解
- 首先对n个点根据点权排序
- 考虑对于任意一个完全子图,可以再扩充的点一定为该完全子图每个点邻接点的交集
- 并且优先扩充点权更小的一定更优,所以可以选择按点权大小顺序扩充,这样还保证了不会重复
- 然后就可以用优先队列维护更新,每次实现一个扩充,并新加这个完全子图,再往后推一推,搞一搞就行了
- 维护临接点用bitset
TLE by rdc 二分上界,DFS 回溯找团,然后解体,二分受到了不公正的对待。
E. Maze
upsolved by sdcgvhgj
题意 n*m的格子,每次向下走或者左右走,不能回头,询问方案数,带修改。
做法 线段树套矩阵乘即可
F. Partition problem
solved by rdc 150min -3
题意 有 (2n) 个人,现需划分成两个等大的集合,一个无序 pair, ((x,y)) 若,(x,y) 属于不同的集合,对答案的贡献为 (v_{xy}),求极大答案。
做法
- 进行折半枚举,划分成两个集合 (L,R)。
- 预处理 (L,R) 每个子集内部无序对权值和。(O(2^nn))
- 预处理 (R) 中每个元素和 (L) 中每个子集权,无序对权值和 (O(2^nn^2))
- 枚举 (L) 中,哪些人属于集合 A,哪些人属于集合 B,枚举 (R) 中哪些人属于集合 (A),(O(C(2n,n)*n))
G. Polygons
upsolved by sdcgvhgj
题意 求n条直线把平面割成的若干多边形
做法
- 共(n^2)个交点,多边形最多有(n^2)个
- 相邻的两交点之间相互连两条边,
- 从一个点开始每次沿顺时针夹角最小的一条边移动,并删除这条边,直到走回这个点,所经过的点形成一个多边形
- 三分eps即可(笑)
H. Second Large Rectangle
solved by rdc 93min -2
题意 给一个01矩阵,求次大全为1的子矩阵大小。
做法
- 求极大子矩阵,预处理每个位置向上能连续延伸多少个 1,枚举下界,单调栈带走,记录次大的答案。
- 把最大子矩阵去掉一行,或者去掉一列,尝试更新答案。
I. Inside A Rectangle
J. Subarray
solved by F0_0H 107min -3
题意 长度为(1e9)的((1, -1))序列,下标从(0)到(1e9-1),已知有(n)个区间为(1),其他为(-1), 问存在多少个区间的和(>1)(保证(sum_{1leq ileq n}r[i]-l[i]+1leq 1e7))
题解
- 可能作为区间端点的点个数最多为(3e7)
- (f[i])表示以第(i)个区间右端点为答案右端点的最大区间和
- (g[i])表示以第(i)个区间左端点为答案左端点的最大区间和
- (f[i] = max(0, f[i-1]-(l[i]-r[i-1]-1))+r[i]-l[i]+1)
- (g[i] = max(0, g[i+1]-(l[i+1]-r[i]-1))+r[i]-l[i]+1)
- 如果(f[i] + g[i+1] geq l[i+1] - r[i] - 1),说明答案的左右端点可以跨越([r[i]+1, l[i+1]-1]),那么把这些合并考虑
- 搞完上面,问题就变成了给你一个长度不超过(3e7)的((1,-1))序列,问有多少区间和大于1
- 树状数组时间(O(n*logn)),稳(T)
- 考虑优化:
- 很好用的性质:每次查询与上次查询的差距等于1
- 从左到右枚举左端点,统计右边比当前值大的个数
- 加个标记,标记左移,稳