退役前杂题乱做 uoj
【UER10】随机薅羊毛
设从第 \(i\) 个抽奖机开始的期望为 \(x_i\),可以列出方程:
最终只需要知道 \(s=\sum_{i=1}^{n}x_{i}\),且上面的方程 \(x\) 的次数都是一次,化简后把 \(n\) 个方程加起来就能得到关于 \(s\) 的一元一次方程,\(O(n)\) 解一下即可
然后炸精了。化简一下式子:
【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})\)