退役前杂题乱做 uoj

【UER10】随机薅羊毛

设从第 \(i\) 个抽奖机开始的期望为 \(x_i\),可以列出方程:

\[x_{i}=p_{i}+(1-p_{i})(1+\frac{\sum_{j\ne i}x_{j}}{n-1}) \]

最终只需要知道 \(s=\sum_{i=1}^{n}x_{i}\),且上面的方程 \(x\) 的次数都是一次,化简后把 \(n\) 个方程加起来就能得到关于 \(s\) 的一元一次方程,\(O(n)\) 解一下即可

然后炸精了。化简一下式子:

\[\begin{align*} \frac{s}{n}&=\frac{1}{n}\cdot\frac{\sum\frac{n-1}{n-p}}{1-\sum\frac{1-p}{n-p}} \\ &=\frac{1}{n}(\frac{\sum\frac{n-1}{n-p}-(1-\sum\frac{1-p}{n-p})}{1-\sum\frac{1-p}{n-p}}+1) \\ &=\frac{n-1}{\sum1-\frac{n-np}{n-p}}+\frac{1}{n} \\ &=\frac{1}{\sum\frac{p}{n-p}}+\frac{1}{n} \\ \end{align*} \]

【UNR5】提问系统

入栈前把栈顶认作父亲(注意添加虚点),问题被转化到树上

\(f[u,i,j]\) 表示点 \(u\) 根链(不包括 \(u\))上有 \(i\) 个 R,子树 \(u\) 中有 \(j\) 个 R 的方案数,B 的数量可以直接算出。转移比较容易

考虑能否优化贡献的计算方式,比如寻找组合意义。\(p_{r}p_{b}^{2}\) 可以看作选一个 R、两个 B 的方案数,改设 \(f[u,i,0/1,0/1,0/1]\) 为对应的 R,B,B 是否已经选了。时间复杂度 \(O(n^{2})\)

实现时可以先把儿子的 \(f\) 合并起来,然后枚举 \(u\) 的值及是否选入即可

【UTR #2】题目交流通道

先判无解:\(d[u,u]=0,d[u,v]>k,d[u,v]>d[u,w]+d[w,v],d[u,v]\ne d[v,u]\),即根据 floyd 的过程一步一步检查

先考虑 sub2。路径 \(d[u,v]\) 有两种情况:
\(\exists w,d[u,v]=d[u,w]+d[w,v]\):即通过 \(w\) 中转,那么边 \((u,v)\) 权值任意
否则这条路径就是 \((u,v)\),权值为 \(d[u,v]\)

\(0\) 的情况可以把最短路是 \(0\) 的点对缩起来,外部相当于有重边的 sub2,内部是 求只考虑 \(0\) 边可以连通的 \(n\) 个点完全图的方案数。套路地用任意图减去非法图,通过枚举 \(0\) 边连通块来计算非法图

【UNR #4】序列妙妙值

\(O(n^{2}k)\) 的暴力 DP 显然:\(dp[i,j]=\min_{k<i}\{dp[k,j-1]+(s[i]\oplus s[k])\}\)\(s\) 为前缀异或。发现值域较小,考虑从值域上优化

对于每个 \(j\),维护 \(f[x]\) 表示 \(s[k]=x\) 的最小 \(dp\) 值,可以 \(O(1)\) 更新 \(O(a)\) 查询;\(g[x]\) 表示 \(s[i]=x\) 的答案,可以 \(O(a)\) 更新 \(O(1)\) 查询。异或对每一位是独立的,根号分治一下,维护 \(s[k]\) 高八位为 \(x\)\(s[i]\) 低八位为 \(y\) 的答案。时间复杂度 \(O(nk\sqrt{a})\)

posted @ 2022-08-04 21:11  401rk8  阅读(95)  评论(0编辑  收藏  举报