UOJ pjudge LOJ 试题乱做 Part1

最近好像做到这些 \(\text{OJ}\) 的好题挺多的, 那就开个 \(\text{Part}\) 吧.


\(\text{【PR \#3】抽卡}\)

\(\color{blue}{\text{[NORMAL]}}\)

啊, 这个世界真奇妙.

首先考虑计算一次抽卡合法的概率.

\(f_{i,j}\) 表示一次 \(i\) 级抽卡, 合法且抽出的卡最大值不超过 \(j\) 的概率, 显然有 \(f_{i,j} = f_{i-1,j}^{b_i}-f_{i-1,i-1}^{b_i}\) .

我们把抽卡操作看成一棵树, 因为各个叶子是等价的, 所以只考虑一个即可, 考虑最左侧的叶子的路径进行 \(dp\) .

考虑倒着 \(dp\) , 设 \(g_{i,j}\) 若最左侧的 \(i\) 级抽卡最大值为 \(j\) 的最终 \(n\) 级抽卡合法的概率, 那么有:

\[g_{i,j}=g_{i+1,j}f_{i,j}^{b_{i+1}-1}+\sum_{k=j+1}{s_{i,k}g_{i+1,k}} \]

其中 \(s_{i,j}\) 表示第 \(i\) 层其他抽卡最大值为 \(j\) 的概率, 即 \(s_{i,j}=f_{i,j}^{b_{i+1}-1}-f_{i,j-1}^{b_{i+1}-1}\) .

貌似理解为从叶子到根更合理.

到最后 \(g_{0,i}\) 的实际意义就是一个叶子选则到 \(i\) 的合法的概率, 时间复杂度 \(\mathcal{O}(n^2\log{b})\) .


\(\text{【UR \#13】Ernd}\)

\(\color{blue}{\text{[NORMAL]}}\)

嗯, 经典题, 经典一碰到旋转坐标系我就不会做题.

首先发现相邻可以接到的水果有极长子区间, 得到暴力 \(dp\) , 设 \(f_{i}\) 为以第 \(i\) 个水果结尾的接水果序列的最大总分.

\[f_{i}=\max\{f_j+1|接到第\; j\; 个水果后可以接到第 \; i \; 个水果\} \\ f_{i}=\max\{f_j-1+(i-j+1)^2|第 \; i \; 个水果和第 \; j \; 个水果属于同一段\} \]

考虑如何优化第一部分的转移, 将水果放在二维平面上, 第 \(i\) 个水果变成一个坐标为 \((a_i,b_i)\) 的点, 容易发现接到这个水果之后能接到的下一个水果的点都在这个点的 \([45\degree,135\degree]\) 范围方向上.

旋转坐标系, 将每个点变为 \((b_i-a_i,b_i+a_i)\) , 那么接到一个水果后能接到之后的水果都在这个点的右上方.

这个问题变成了一个二维偏序问题, 树状数组做即可.

考虑如何优化第二部分转移, 注意到一段内的元素在按照 \(b_i-a_i\) 排序之后可能不连续了, 但相对位置没有变, 因此不用担心转移顺序的问题, 这部分转移每段之间彼此独立, 因此可以考虑每段内分别计算.

剩下的式子是裸的斜率优化, 维护一个上凸壳即可, 注意到查询斜率 \(2i\)\(i\) 单调递增, 因此我们需要用栈来维护这个凸包.

当然也可以决策单调性.

时间复杂度均为 \(n\log{n}\) .


\(\text{【UER \#7】套路}\)

\(\color{green}{\text{[EASY]}}\)

根据 \(m \leqslant 1000\) 的提示, 区间长度超过 \(m\) 就是 \(0\) , 更进一步, 如果区间长度为 \(x\) 那么最小差不超过 \(\dfrac{m}{x-1}\) .

因此考虑根号分治, 令 \(S=\sqrt{m}\) .

如果 \(x \leqslant S\) , 不难做到 \(\mathcal{O}(nS)\) , 如果 \(x > S\) , 那么最小差不会超过 \(\dfrac{m}{x-1}\) , 扫一遍序列, 考虑当前点为右端点, \(pos_x\) 表示权值为 \(x\) 的点最后出现的位置, 每次新加入一个数 \(z\) 对于所有的 \(|z-y|\leqslant \dfrac{m}{S-1}\) , 利用 \(pos_y\) 进行更新, 时间复杂度 \(\mathcal{O}(n\frac{m}{S})\) .

总时间复杂度为 \(\mathcal{O}(n\sqrt{m})\) .


\(\text{【UR \#11】元旦老人与数列}\)

\(\color{green}{\text{[EASY]}}\)

区间 \(\max\) 变成找到次小值严格大于 \(val\) 最小值严格大于 \(val\) 的区间, 相当于区间加, 维护区间最小, 次小, 历史最小, 最小次小标记, 最小次小历史标记历史最小即可.


\(\text{【UR \#12】密码锁}\)

\(\color{green}{\text{[EASY]}}\)

完全图随机定向是竞赛图, 将它缩点后会是一个链状图, 满足每个点和后面的点都有连边, 所以求的就是这个图的点的期望.

这条链我们可以划分成两个点集 \(S,V\setminus S\) , 使得没有从 \(V\setminus S\) 中的点到 \(S\) 中点的边, 那么答案就是划分方案数加 \(1\) .

\(p_{x,y}\) 表示 \((x,y)\) 被定向为 \(x \rightarrow y\) 的概率, 那么划分方案的期望就是 \(\sum\limits_{S\subset V , S \not = \varnothing}{\prod\limits_{x \in S,y \in V\setminus S}{p_{x,y}}}\) .

所以当 \(m=0\) 时答案为 \(\sum\limits_{i=1}^{n-1}{\binom{n}{i}(\frac{1}{2})^{i(n-i)}}\) .

我们先钦定每条边的概率为 \(\frac{1}{2}\) , 对于特殊边, 若它的概率为 \(p\) , 那么它对概率的贡献为 \(2p\) .

特殊边相当于连接着一些弱连通块, 对于每个弱连通块, 求出 \(f_i\) 表示有 \(i\) 个点在 \(S\) 集合的概率, 直接枚举每个点属于 \(S\) 还是 \(V\setminus S\) 即可, 因为有 \(m\) 条边的连通块最多有 \(m+1\) 个点, 所以枚举的时间复杂度为 \(\mathcal{O}(2^{m})\) .

最后对于每个弱连通块做背包, 答案即为 \(\sum\limits_{i=1}^{n-1}{f_i(\frac{1}{2})^{i(n-i)}}\) , 时间复杂度 \(\mathcal{O}(2^mn^2)\) .


\(\text{【PR \#5】双向奔赴}\)

\(\color{green}{\text{[EASY]}}\)

耳分解板子题, 令 \(f_{S,v,w}\) 表示目前考虑了一个耳 \(u\)\(w\) , \(v\)\(w\) 的部分没有构造完成, \(S\) 表示 \(u\)\(v\) 的部分, 此时的最小代价.

时间复杂度 \(\mathcal{O}(2^nn^3)\) .


\(\text{【PR \#4】猜猜看}\)

\(\color{blue}{\text{[NORMAL]}}\)

很有意思啊, 但好像不难, 但为什么我没想到呢, 好好反思.

不难想到一个有 \(3\) 次询问 \(1\) 的做法, 确定前 \(3\) 个中的大小关系, 然后直接用询问 \(2\) 扫过去, 这启发我们了最大和最小的位置很管用, 再想两次询问 \(1\) 会用在哪, 区分 \(1,2\)\(n-1,n\) .

也就是说我们应该关心最小, 次小, 最大, 次大, 我们可能通过 \(4\) 次询问找出前 \(4\) 个中, 两个较小的数和两个较大的数, 然后 \(\mathcal{O}(n)\) 往后推, 并分类讨论.

记最小次小最大次大位置分别为 \(l_1,l_2,r_1,r_2\) , 次小值和次大值为 \(L,R\) , 我们暂时无法区分 \(l_1,l_2\)\(r_1,r_2\) .

先询问 \(x = query2(l_1,r_1,i)\) .

  1. \(L < x < R\) , 说明 \(a_{i} = x\) .
  2. \(L = x\) , 说明 \(a_i<a_{l_1}=x\) , 更新 \(l_1\)\(i\) , 并询问出新的 \(L\) , \(R=x\) 同理.
  3. \(x<L\) , 说明 \(a_i<a_{l_2}=L\) , 更新 \(l_2\)\(i\) , 并询问出新的 \(L\) , \(R=x\) 同理.

最后操作 \(1\) 区分出 剩下的即可.


\(\text{【PR \#4】赌徒}\)

\(\color{green}{\text{[EASY]}}\)

两面一定是 \(1\) 或者出现过的数字.

注意到答案的形式为 \(-cy+\sum\limits_{i=1}^{n}{\frac{x_i}{4}([c\geqslant a_i]+[c\geqslant b_i]+[y\geqslant a_i]+[y\geqslant b_i])}\) .

发现是 \(\max\{S_a+S_b-ab\}\) 的形式, 那可以枚举 \(a\) , 发现只有凸包上的 \(b\) 有用, 双指针即可.

时间复杂度 \(\mathcal{O}(n)\) .


\(\text{【PR \#5】循环移位}\)

\(\color{green}{\text{[EASY]}}\)

为什么我永远忘记暴力啊.

我们可以 \(2^{n-1}\) 枚举换不换的关系, 直接大力 \(dfs\) , \(f(step,ptr,cnt,ways,seen[n])\) , 分别表示第几次操作, 当前最小值位置, 确定的数个数, 到当前状态的方案数, \(senn[]\) 是个 \(bool\) 数组, 表示已经确定的大小关系.

这是 \(\mathcal{O}(2^n)\) 的, 但跑 \(n=42\) 时大概在 \(10^9\) 左右, 所以打表即可.


\(\text{【UR \#15】奥林匹克五子棋}\)

\(\color{green}{\text{[EASY]}}\)

属实简单的构造题.

发现 \(k=1\) 必然无解, \(k=2\)\(n\)\(m\) 中有一个大于等于 \(2\) 就无解, 考虑如果可以构造出 \(k=3\) 的, 那实际上所有问题都解决了.

\(k=3\) 一个不能出现 \(2\times2\) 的同色块, 或者 \(L\) 型的同色块, 那就只能出现条形的, 那就是 \(1\times2\) 的条间隔分布即可.

稍加特判即可通过.


咦, 这个 \(\text{Part}\) 结束的可真快, 好吧其实也不快, 有点慢了, 感觉这些题, 有些简单有些, 奇妙, 思考着也不算痛苦, 做法令人心情愉悦, 这其实是因为我提前看了一眼做法, 那些会令人心情不美好的题先跳过了hhh, 放到后面的 \(\text{Part}\) 去了.

posted @ 2022-09-26 21:09  Lonely923  阅读(89)  评论(0编辑  收藏  举报