2016-2017 ACM-ICPC Asia-Bangkok Regional Contest
A. WSI Extreme
upsolved by F0_0H
题意 \(n\)个人排队上\(m\)个厕所,每个人尿尿时间为\(a[i]\), 要求输出最少的每个人上完厕所时间和,支持修改一个人尿尿时间
题解
- 贪心,所有人尿尿时间从大到小排序,依次轮流上\(m\)厕所,即第\(i\)个人去编号为\((i-1)/m)\)的厕所,排在第\((i-m)\)个人后面
- 维护修改
(1)当\(m\)比较大时,权值线段树维护区间和以及区间点个数,暴力查询答案
(2)当\(m\)比较小时,对于序列每个点按照标号对m取余分类,权值线段树分别维护每个剩余系的答案,按照等差数列加权求和
理论时间复杂度\((q*\sqrt m*log n )\),空间复杂度\((n*\sqrt m)\)
但由于空间开不了,以上谈的都是狗屁,数据比较水,咋都能过
B. Average
solved by F0_0H 46min start, 76minAC
题意 问存在多少长度为\(n\)的序列\(a[1], a[2]..a[n] (a[i]\leq m,1\leq i\leq n] )\),满足序列平均值在序列中出现过,并且出现几次算几次
题解
- \(f[i][j]\)表示长度为\(i\)的序列和为\(j\)的方案数,前缀和优化一下
- 统计答案:直接枚举平均数即可
考虑复杂版本:不重复计算
- 可以容斥搞一搞(比赛看错题导致的稍复杂解法)
C. Big Bang
solved by sdcgvhgj 180min start, 197min AC, -1
题意 任意方向任意速度的粒子从源点射出,问N秒内有多少不同的粒子经过\(1≤x,y,z≤N\)的整点
做法
- 即问有多少个不同的四元组\((x,y,z,t),1≤x,y,z,t≤N\)且两个四元组相等当且仅当\((\frac{x_1}{t_1},\frac{y_1}{t_1},\frac{z_1}{t_1})=(\frac{x_2}{t_2},\frac{y_2}{t_2},\frac{z_2}{t_2})\)
- 所以将\((x,y,z,t)\)唯一表示为\((\frac{x}{d},\frac{y}{d},\frac{z}{d},\frac{t}{d})\)
- 其中\(d=gcd(x,y,z,t)\)
- 于是变成了求\(\sum_{x=1}^{N}\sum_{y=1}^{N}\sum_{z=1}^{N}\sum_{t=1}^{N}[gcd(x,y,z,t)==1]\)
- 反一下就是\(\sum_{d=1}^{N}\mu(d)*\lfloor\frac{N}{d}\rfloor^4\)
- N=80000要用高精。
D. Find C
solved by RDC 90min start, 299min AC, -9
题意 给出两个整点 A,B,求整点 C,满足三角形 ABC 区域中,除了 AB 线段与 C 点,没有整点,输出 \(k\) 个解。
做法
- 令 \(dx=A_x-B_x, dy=A_y-B_y\),若 \(dx\) 小于 0,\(dx,dy\) 都取反。
- 特判掉 \(dx=0,abs(dx)=abs(dy)\) 的情况。
- 不妨设 \(dy>0\)。
- 将直线 AB 向下平移直到穿过整点,我们可以发现穿过的整点具有周期性的,横坐标的最小正周期为 \(\frac{dx}{gcd(dx,dy)}\)。
- 找到直线 AB 下方,任意一个距离 AB 最近的点即可,根据周期性可得到一个解系。
- 确定一个 \(t\) 极小化 \(t*\frac{dy}{dx}\) 小数部分(小数部分为 0 是 invalid),因此有 \((t*dy)\%dx=1\),$t $ 为 \(dy\) 关于 \(dx\) 的逆元。
夕阳红
- 快速幂写了只。
- 逆元不管是不是质数直接上费马小定理。
- 扩展欧几里得符号一片混乱。
-8 / 3 = ?
E. ACM Tax
solved by F0_0H 150min start, 183min AC
题意 给定带边权的一棵树,每次询问数量两点路径边权的中位数
题解
- 1为根,按每个点到根路径信息建主席树
- 每次询问\(u,v\), 其路径信息主席树为,\(Tree_u + Tree_v - 2 * Tree_{lca(u, v)}\)
F. Dictionary Game
solved by sdcgvhgj 150min AC
题意 两人博弈,轮流操作,每次选词典中某个字符串的某个前缀s,然后将词典中以s为前缀的字符串只保留前|s|-1个字符,不能操作则输,每次在词典中添加一个字符串并询问先手必胜还是必败。
做法
- 相当于字典树上每次选一个点把它和它的子树删除。
- 设\(sg_u\)为以u为根的子树的\(sg\)值,RDC盲猜\(sg_u=1+\bigoplus_{v}sg_v\),AC。
G. Binary Strings
solved by sdcgvhgj 73min start, 86min AC
题意 求多少种01串满足\(l≤len≤r\)且\(k|len\)且不能有相邻的1
做法
- 设\(f(n)\)为长度为n的没有相邻1的01串的数量,\(sum(n)=\sum_{i=1}^{n}[k|i]f(i)\),有\(f(n)=f(n-1)+f(n-2)\)
- 设
\[\left[ \begin{matrix}1&1\\1&0\end{matrix} \right]^k=\left[ \begin{matrix}a&b\\c&d\end{matrix} \right],B=\left[ \begin{matrix}1&a&b\\0&a&b\\0&c&d\end{matrix} \right] \]
有
\[\left[ \begin{matrix}f(n+1)\\f(n)\end{matrix} \right]\left[ \begin{matrix}1&1\\1&0\end{matrix} \right]=\left[ \begin{matrix}f(n)\\f(n-1)\end{matrix} \right] \]
\[\left[ \begin{matrix}f(n+k)\\f(n+k-1)\end{matrix} \right]\left[ \begin{matrix}a&b\\c&d\end{matrix} \right]=\left[ \begin{matrix}f(n)\\f(n-1)\end{matrix} \right] \]
\[\left[ \begin{matrix}sum(n+k)\\f(n+k)\\f(n+k-1)\end{matrix} \right]\left[ \begin{matrix}1&a&b\\0&a&b\\0&c&d\end{matrix} \right]=\left[ \begin{matrix}sum(n)\\f(n)\\f(n-1)\end{matrix} \right]\]
\(把B矩阵求\lfloor\frac{r}{k}\rfloor次幂和\lfloor\frac{l-1}{k}\rfloor次幂得到sum(\lfloor\frac{r}{k}\rfloor*k)和sum(\lfloor\frac{l-1}{k}\rfloor*k)\) - \(ans=sum(\lfloor\frac{r}{k}\rfloor*k)-sum(\lfloor\frac{l-1}{k}\rfloor*k)\)
H. Witcher Potion
solved by RDC 200min start, 215min AC
题意 题意好长。
做法 施展 DP,\(dp[mask][E][P]\) 表示以还有 \(mask\) 的药没用,能量为 \(E\),毒量为 \(P\),最多打死多少只怪物,转移决策一下用哪瓶药,或者不用。
PS:读题优先级需要提高。
I. Sky Tax
solved by RDC 34 min start, 46 min AC,-1
题意 给一棵树,两种操作,1. 换根。2. 查询子树大小。
做法 先以 1 号点为根,记录当前的"根" \(rt\),查询 \(x\) 子树大小时,如果 \(rt\) 在 \(x\) 子树外,那么答案为 \(size(x)\),否则答案为 \(n-size(x')\),\(x'\) 为从 \(rt\) 一直往上走会遇到的 \(x\) 的儿子。
小品表演 vector 不清空,RE 了一发。
K. Expected Number of Connected Components
题意 一个图有标号为 \(1\)~\(n\) 的 \(n\) 个点,两点之间 gcd 大于 1 则有边,第 \(i\) 个点有 \(p[i]\) 的概率存在,求连通块个数期望。
解体
- 两点有边等价于两质因子集合有交,有交的质因子集合可以 unite 在一起,我们可以按 unite 的结果,把极大连通块划分成很多个等价类。
- \(p(S)\) 表示存在极大连通块 unite 后得到集合 \(S\) 的概率,根据期望可加性,\(\sum P(S)\) 即为答案。
- 考虑 \(P(S)\) 计算,我们分类讨论。
- a) \(|S|=1\),easy
- b) 定义 \(Pri = \{2,3,5,7,11,13,17,19,23,29,31,37,39,41,47\}\), \(S\) 是 \(Pri\) 的子集,hard
- 考虑 DP。\(f[T]\) 表示对 \(T\) 的每个子集进行正义之审判,最终苟住的集合,unite 起来,等于 \(T\) 的概率,\(S\) 集合中最小的质因子我们称之为"排骨龙",一定属于某极大连通块,或者不存在,枚举排骨龙生活的环境,即可转移。
- 预处理优化后复杂度 \(O(3^{|Pri|})\)
- 一轮激烈地施展,于是解锁了 Bad End:TLE。
- 把 37,39,41,47 从 \(Pri\) 中开除掉,解锁了另一个 Bad End:WA.
- 啊啊啊啊啊啊啊啊啊啊。解体。
口胡 比赛时意识到了我们应该观察一个连通块的特征,然后计算有多大的概率出现这样的连通块,这个意识不错,但没有想“特征”是啥?
L. Coordinates
solved by sdcgvhgj 8min start, 34min AC, -1
题意 给两点之间dx,dy,确定每个点
做法
- 每个联通块选个点标为(0,0)dfs一下然后调整一下坐标范围
- 开始按无向图跑也没调整坐标WA了一发