杂题选放

提示:点击解题思路即可展开。

UOJ62「UR #5」怎样跑得更快

题目大意

给定整数 \(n,c,d\) 和个长度为 \(n\) 的数组 \(b[]\),求另一个数组 \(x[]\),对于 \(P=998244353\),满足

\[\sum_{j=1}^n\gcd(i,j)^c\times lcm(i,j)^d\times x_j=b_i \pmod P \]

数据范围

\[1 \le n \le 10^5 \]

解题思路

先说题解给出的解法,首先一步转化

\[\sum_{j=1}^n\gcd(i,j)^{c-d}\times \frac{x_j}{j^d}=\frac{b_i}{i^d} \pmod P\\ \sum_{j=1}^n\gcd(i,j)^{c-d} X_j=B_i \pmod P\\ \]

第一波直接设 \(f(n)=\sum_{d|n}f_r(d)\) 这样 \(f_r(n)=f(n)-\sum_{d|n\and d \neq n}f_r(d)\) 是可以 \(\Theta(n\log n)\) 求的。然后推一波式。

\[\sum_{j=1}^nf(\gcd(i,j))X_j=B_i\\ \sum_{j=1}^n\sum_{d|i,d|j}f_r(d)X_j=B_i\\ \sum_{d|i}f_r(d)\sum_{j=kd}X_j=B_i\\ \sum_{d|i}f_r(d)S(d)=B_i\\ \]

可以算得 \(f_r(n)S(n)=B_n-\sum_{d|n\and d \neq n}{f_r(d)S(d)}\)

因为 \(f_r(n)\) 有可能等于 0,这时候判一下无解或多解,这样我们就把 \(S(n)\) 全算出来了。

然后考虑解出 \(X_j\),有 \(S(d)=\sum_{i=kd}^{n}X_i\),所以 \(X_d=S(d)-\sum_{i=(k+1)d}^{n}X_i\)

然后就做完啦,容易发现这里一共用了三次莫比乌斯反演!


CF232C Doe Graphs

题目大意

递归的定义一个 \(n\) 阶无向图 \(D(n)\),边权均为 1

  • \(D(0)\) 由节点 1 构成
  • \(D(1)\) 由节点 1, 2 和边 (1, 2) 构成
  • \(D(n)\) 以如下方式构造
    • \(D(n-2)\) 的中的点编号都加上 \(|D(n-1)|\)
    • 在点 \(|D(n-1)|\) 和点 \(|D(n-1)|+1\) 之间连边。
    • 在点 \(|D(n-1)|+1\) 和点 1 之间连边

对于 n 阶无向图 \(D(n)\) 多次询问求出点 \(x, y\) 之间的最短路

img

数据范围

\[1 \le n, q \le 10^5\\ 1 \le x ,y \le 10^{16} \]

解题思路

情况一:a 在左部图,b 在右部图

img

首先观察发现 \(|D(n-1)|+1\) 事这个图的割点,也就是说左边到右边一定要经过这个点,所以递归去做

\[Dis(a,b,n)=\min(Dis(1,a,n-1),Dis(a,|D(n-1)|,n-1))+Dis(1,B-|D(n-1)|,n-2) \]

情况二:a,b 均在右部图

容易发现 \(Dis(a,b,n)=Dis(a-|D(n-1)|,b-|D(n-1)|,n-2)\)

情况三:a,b 均在左部图

img

容易发现要么直接从 a 走到 b,否则有可能到 \(|D(n-1)+1|\) 这个点汇集,有

\[Dis(a,b,n)=\min\left\{ \begin{matrix} Dis(a,b,n-1)\\ Dis(1,a,n-1)+Dis(b,|D(n-1)|,n-1)+2\\ Dis(1,b,n-1)+Dis(a,|D(n-1)|,n-1)+2\\ \end{matrix}\right. \]

这样就可以递归着做了,然而我们还是发现第三种情况分生出的太多,\(\log\) 的时间内事不行的,但考虑到 n 的大小事 \(\log\) 的,另外算的 \(Dis\) 值大多与 \(1,|D(n)|\) 相关。

所以我们预处理出,\(A1[n] = Dis(1,a,n),A2[n]=Dis(a,|D(n)|,n)\),对于 b 类似,这样就没有那么多分支了。

预处理的过程和上面三种情况一致,注意还要处理 \(g[n] = Dis(1,|D(n)|,n)\),递推式为 \(g[n] = g[n-2]+1\)


CF1310 Au Pont Rouge

题目大意

给出一个长度为 \(n\) 的字符串 \(S\) 以及整数 \(m,k\)

对于一个把 \(S\) 分割成非空的 \(m\) 段的一个方案,我们用这个方案中分割出的字典序最小的一个串代表这个分割方案。

eg. \(S=abaabb,m=3\),存在分割方案 \(\{ab,aab,b\}\),则我们用字典序最小的 \(aab\) 来代表这个分割方案。

现在把所有分割方案对应的代表该方案的串按字典序从大到小排序,求排序后的第 \(k\) 个串。

数据范围

$ 2 \le n \le 1,000,1 \le m \le 1,000, 1 \le k \le 10^{18} $

解题思路

第 k 大肯定能想到二分,我们把它的所有子串按字典序排序,然后二分第 k 个串是什么,然后 dp \(\Theta(n^2)\) 算出方案数即可。

难点大概在 dp 上,设 \(dp[x][y]\) 表示前 x 个位置,划分了 y 个字典序大于二分串,且第 x 个位置处一定被划分的方案数,容易发现这样事 \(\Theta(n^3)\)的,有没有复杂度更低的方法呢?

考虑倒着 dp,\(dp[x][y]\) 表示考虑了 \(x\text~n\),恰好划分了 m 段的方案数,\(fp[x][y]\) 表示考虑了 \(x\text~ n\),已经划分了 m 段的方案数,设 t 表示 \(s[x\dots t]\) 字典序恰好大于二分串的位置,那么转移为

\[dp[x][y] = d[t][y-1]\\ d[x][y] = dp[x][y]+d[x+1][y] \]

是不是非常简单 😁


GYM102059 B.Dev, Please Add This!

题目大意

给定一个地图,由 墙 # 空地 . 起点 O 特殊点 * 构成,从起点开始行走,问是否可以经过所有的特殊点。其中行走的规则如下:

  • 可以向上下左右四个方向走
  • 碰到边界或者墙就停止,否则不可以停下

样例

3 7
#..O..#
#.###.#
*..#..*

NO

6 6
*..*##
..O...
*..*#.
####*.
......
.....#

YES

数据范围

\(1 \le H,W \le 50\)

解题思路

我们把图建出来,A 到 B 有边当且仅当能从 A 直接走到 B,然后我们缩点求连通分量。

发现了吗,有三种限制,考虑你最终走出的路径中到达的连通分量。

  • 每个特殊点上下肯定在一个连通分量内,左右亦然,这个点被经过当且仅当这两个连通分量至少有一个被到达。
  • 从出发点到不了的连通分量必不能到达
  • 如果 A 和 B 两个连通分量没有祖先关系必不能同时到达。

每个连通分量只有被到达和不被到达两种情况,这样就是一个 2-sat 可以解决的问题了。


D. Yui and Mahjong Set

题目大意

img

这是一道交互题。

有一个由 \(n\) 个数构成的集合 \(S\),内部元素可以重复。

保证,内部元素的值 \(a_i\) 都满足 \(1\le a_i\le n\),且对于一种值 \(k\) 保证 \((\sum_{i\in S} [a_i=k])\le n\),即每种值在集合内不会出现超过 \(n\) 次。

定义一个 \(\mathbf {triplet}\)\(S\) 的一个大小为 \(3\) 的子集,且这三个元素的值相同。

定义一个 \(\mathbf{straight}\)\(S\) 的一个大小为 \(3\) 的子集,且这三个元素的值连续,例如 \(\{2,3,4\}\) 是一个 \(\mathbf{straight}\),但是 \(\{1,3,5\}\) 不是一个 \(\mathbf{straight}\)

例如,对于集合 \(\{1,2,2,1,3\}\) 中,其 \(\mathbf{straight}\) 的数量为 \(4\)

现在你可以进行至多 \(n\) 次查询操作和 \(1\) 次回答操作:

  • 查询操作:将一个数 \(x(1\le x\le n)\) 插入集合 \(S\),然后交互器会告诉你插入结束后集合 \(S\) 中的 \(\mathbf{triplet}\)\(\mathbf{straight}\) 的数量。

  • 回答操作:令 \(c_i\) 表示集合 \(S\) 中权值为 \(c_i\) 的数的个数,则你需要求出对于初始的集合 \(S\),求出 \(c_1,c_2\sim c_n\)

  • 交互器会告诉您 \(n\) 以及初始时集合 \(S\) 中的 \(\mathbf{triplet}\)\(\mathbf{straight}\) 的数量。

执行查询操作的格式为 + x,执行回答操作的格式为 ! c1 c2 c3 ... cn

数据范围

\(4\le n\le 100\)

解题思路

显然我们看总量是没有什么用的,要看增量。

首先如果一个数出现个数大于等于 2,那么给它加一通过 \(\mathbf{triplet}\) 的数量可以直接求出它到底出现了几次,否则它的出现情况就是 0 和 1。

进一步的,确定一个数最多只用两次。另外加 1 时的 \(\mathbf{straight}\) 只会和 2,3 有关,根据我们头脑中的搜索剪枝,最终得到了这样的一个可行解。1,3,1 的顺序能让我们同时确定 1 和 2,确定 1 用 \(\mathbf{triplet}\) 即可,确定 2 通过两次询问 \(\mathbf{straight}\) 得到,即解方程组 \(\left\{\begin{matrix} bc=k_1\\b(c+1)=k_2\end{matrix}\right.\) ,c 当 b 不等于 0 时能够解出,那么我们第一开始就把 b 加一就行了,这是我们用四次求出了前三个值,并且保证大于 0。

如果 \(n = 4\),把 \(\mathbf{straight}\) 的方程都列出来,直接解即可。

否则,我们发现通过前几次询问,我们能确定 4 是否是 0,这样我们询问 4 的时候就可以直接确定了,询问 4 的时候又可以得知 5 是否是 0,以此类推,直到 \(n-1\) 时,我们直接可以通过解个方程得到 \(c_n\) 了。


UOJ507「JOISC2020」星座3

题目大意

\(JOI-kun\) 拍了一张夜景照片。这张照片由 \(N \times N\) 个像素组成,即长宽均为 \(N\) 个像素。从左到右第 \(x\) 列,从上往下第 \(y\) 行的像素被称为 \((x,y)\)
图片中的每个像素都代表着建筑物、夜空或星星。建筑物颜色是白色、夜空颜色是黑色,星星颜色是黄色。对于 \(1 \le i \le N\) 的每个 \(i\),在第 \(i\) 列中,从最下面一行到第 \(A_i\) 行像素是表示建筑物的白色像素。其余的像素中,有 \(M\) 个黄色像素代表着星星。第 \(j\) 个黄色像素 \((1 \le j \le M)\) 是像素 \((X_j,Y_j)\)。所有其他像素都是代表夜空的黑色像素。
我们称对于原照片的一个子矩形,如果以下两个条件成立,则被称作一个星座:

  • 矩形区域中没有白色像素。
  • 矩形区域中有两个或多个黄色像素。

$ JOI-kun$ 已经厌倦了看星座。因此他想把一些黄色像素画成黑色,使得修改后的照片不存在任何星座。
然而,如果他将过多黄色像素涂黑,这幅画就变得不自然了。更准确地说,如果他把第 \(j\) 个黄色像素 \(1 \le j \le M\) 成黑色,那么图片的不自然度就会增加 \(c_j\)。没有进行涂黑操作前,照片不自然度为 \(0\)
编写一个程序,在给定图片信息和每个黄色像素的整数的情况下,选择若干个星星涂黑,使得修改后的图不存在星座,且不自然度最小。

样例

Input:
5
1 3 4 2 3
3
1 5 3
4 3 2
2 4 2

Output:
2

样例一示意图

数据范围

对于所有测试数据,满足\(1 \le N,M \le 200000,1 \le A_i \le N,1 \le X_i,Y_i \le N,1 \le C_j \le 10^9\)

解题思路

将星星和高楼的座标都按纵座标从小到大排序,使用并查集维护从一个点向左向右在不穿墙的情况下最远能到达哪

然后维护一个树状数组表示每个位置放置所需的代价(先说做法再解释为什么,因为太神仙了!

看看当前位置在树状数组上的值 \(S\),和这颗星星消除的代价 \(C\) 比较

  • \(S \ge C\) 答案直接加上 \(C\),因为在上面的点更容易和别的点冲突,而且代价更大,肯定不优,删掉
  • \(S < C\) 答案暂时加上 \(S\),并将区间 \([L, R]\) (表示能够到达区域)每个值加上 \(C - S\)

乍一看好像没什么道理,甚至随随便便就可以 \(Hack\) 一下?

但事实上它是正确的,请想象一下在某个局面时,强制一个点必选所获得的代价,可以发现位置靠下的星星与之冲突的都会有 \(C_i-S_i\) 的贡献,因为之前答案暂时加了 \(S_i\),那么在加上差就会变为 \(C_i\),而不冲突的则安然无恙

但我还是不会严格证明每一步都会是最优解 QAQ,哪位神仙会可以教教我

以下为个人 \(\mathbb{YY}\) 部分:

由构造方法可知,在以前的每一步均是最优解且没有修改过前面的状态,即保留下来的点删除不会更优,放入一个点时必将冲突点全部删除,这时冲突点的冲突点将全部释放(重新选中),而不会重新选中它们所冲突的更深层点,因为以前的保留点已经做到比选更深层点优

感谢聆听
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章