做题记录 25.8.15
\(\textcolor{purple}\odot\) CF1578M The Mind
显然具体方案只和 \(a_1\) 有关
\(a_1\le x\) 的概率大约为 \(1-\left(1-\frac x{100}\right)^5\),由此可以得到前 \(\frac i6\mid 0\le i\le 5\) 概率时的值 \(v_i\),大约为 \([0, 3.58, 7.79, 12.94, 19.73, 30.12, 100]\)
当 \(a_1\in(v_{i-1},v_i]\) 时恰好在第 \(i\) 次出牌即可(即第 \(i\) 次概率为 \(1\),其余概率为 \(0\)),可证成功率为 \(\frac 56\),略高于 \(85\%\)
\(\textcolor{purple}\odot\) CF1578B Building Forest Trails
将环从 \(n-1\) 处断开,放到链上处理
显然用并查集维护连通性,问题转化为每次给定 \((x,y)\),快速找到与之相交的连通块
每个连通块 \(S\),设其中的点从左到右依次为 \(s_{1\sim k}\),则 \(s_1-s_2\),\(s_2-s_3\),\(\cdots\),\(s_{k-1}-s_k\) 之间连边
令 \(p_i\) 表示点 \(i\) 上方 的边的数量,显然相邻的 \(p\) 之差不超过 \(1\)
假设目前要合并 \(S\) 和 \(T\) 两个连通块
对于每个连通块 \(S\) 保存 \(l_S=s_1\),\(r_S=s_k\),若 \(l_S\le r_S<l_T\le r_T\),则令 \(p_{r_S+1\sim l_T-1}\) 加一,否则必有 \(l_S<l_T\le r r_T<r_S\) 或 \(l_T<l_S\le r_S<r_T\),前者需要 \(p_{l_T\sim r_T}\) 减一,后者同理
用线段树维护 \(p\)
假设要连接 \(u,v\),且 \(u<v\)
若 \(p_u=p_v\),找到 \((u,v)\) 中第一个 \(p\) 小于 \(p_u\) 的位置 \(s\),显然与 \(s\) 所在连通块相交,合并之,否则无法合并,退出
若 \(p_u>p_v\),同样找到 \(s\)(此时一定存在)并合并,\(p_u<p_v\) 则找到 \((u,v)\) 中最后一个小于 \(p_v\) 的位置并与 \(v\) 合并
时间复杂度 \(O(n\log n+m\alpha(n))\),注意常数
[2025“钉耙编程”中国大学生算法设计暑期联赛(9) 1005] 计算几何
对于所有极大共线子段,只保留第一个和最后一个点,特殊处理收尾,显然这样得到的 \(k\) 最优
对于每个点,求出它指向前后两个点的向量的叉积是否为正,要么对于所有点,它被包裹当且仅当其对应叉积为正,要么都为负,显然 \(x\) 坐标最小的一个点必然被包裹,用它修正结果即可
时间复杂度 \(O(\sum n\log n)\),瓶颈在于输出时的排序
注意 \(2\times (2\times 10^9-(-2\times10^9))^2\) 大于 LLONG_MAX,因此需要用 __int128_t 或 uint64_t
[2025“钉耙编程”中国大学生算法设计暑期联赛(9) 1002] 预处理器
记录 \((a_1,b_1)\;\;op_1\;\;(a_2,b_2)\;\;op_2\;\;\cdots\;\;op_{k-1}\;\;(a_k,b_k)\),其中 \(op_i\in\{\times,+,<<\}\),\(a_i\) 表示值 \(\bmod M\),\(b_i\) 表示值 \(\bmod (M-1)\)
求值时先将 \(\times\) 的从左到右缩在一起,然后是 \(+\),最后是 \(<<\)
拼接时直接将序列用对应符号连接即可
显然这样时间复杂度为 \(\~O(2^n)\)
显然任意情况下,\(op_i=(\times)\) 时可以将 \((a_i,b_i)\) 和 \((a_{i+1},b_{i+1})\) 缩起来
然后对于任意 \(op_i=(+)\;(1<i<k)\) 也可以缩起来
若 \(op_{i-1}=op_i=op_{i+1}=(<<)\),则可以把 \((a_i,b_i)\;\;<<\;\;(a_{i+1},b_{i+1})\) 缩为 \((a_i+a_{i+1},b_i+b_{i+1})\)
显然这样处理后,\(k\) 为常数
时间复杂度 \(O(n)\),常数极大
[2025“钉耙编程”中国大学生算法设计暑期联赛(9) 1010] 阿斯蒂芬
显然最优情况下同一 \(\text{SCC}\) 状态相同,且一个 \(\text{SCC}\) 沉寂当且仅当 它不是单点且缩点后能到达它的 \(\text{SCC}\) 中存在 \(a>0\) 的 或 它是单点且缩点后能到达它的非单点 \(\text{SCC}\) 中存在 \(a>0\) 的
实现是容易的,时间复杂度 \(O(\sum (n+m))\)
[2025“钉耙编程”中国大学生算法设计暑期联赛(9) 1107] 三角剖分
将三角形看做点,两个三角形相邻则连边,选择任意一个两边为多边形边的三角形为根,显然得到一棵树
对于一个三角形,若它与它父亲之间相邻的一条边为 \(u-v\),且 \(u<v\),则用 \((u,v)\) 表示这个三角形
令 \(dp_{u,i}=(f,g)\) 表示点 \((u,v)\) 子树内 \(u,v\) 相连、不相连时的方案数,其中 \(v\) 为 \(u\) 的第 \(i\) 条出边指向的点(根据指向的点排序,从 \(0\) 开始编号)
设点 \((u,v)\) 为三角形 \((u,v,w)\),其中 \(u<w<v\),\(w\) 为 \(u\) 第 \(i-1\) 条出边指向的点,则 \(w-v\) 为 \(w\) 所有出边中最大的一条(若不是,设最大的一条为 \(w-k\),则 \(w-k\) 与 \(u-v\) 相交,不合法)
显然 \(dp_{u,0}=(1,1)\)(两个点,连与不连各一种方案),转移为
其中 \((f_1,g_1)+(f_2,g_2)=(f_1g_2+f_2g_1+f_1f_2,f_1g_2+f_2g_1)\)
令 \(d(f,g)=f-g\) 表示不通过 \(u,v\) 就能连接的方案数,统计答案时,令 \(dp'_{u,i}\) 表示子树以外部分的答案,转移类似,则答案为 \(\sum_u \sum_i d(dp_{u,i})g(dp'_{u,i})+g(dp_{u,i})d(dp'_{u,i})\)
时间复杂度 \(O(n\log n)\),瓶颈在于排序,容易做到 \(O(n)\)

浙公网安备 33010602011771号