其他分享
首页 > 其他分享> > 杂题选放

杂题选放

作者:互联网

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

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

对于 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] \]

是不是非常简单

标签:le,mathbf,选放,sum,像素,杂题,straight,Dis
来源: https://www.cnblogs.com/Hs-black/p/14807086.html