ARC158 题解
D. Equation
好猛啊这个题。
下文将会给出两种做法,一种是官方题解,一种来自 @我打。
下文构造的 \(x,y,z\) 不按大小排序。
算法一
来自 @我打,考虑钦定 \(y=kx,z=k^2 x\),那么,第二个条件可以变为:
如果 \(k^2+k+1\),\(k^{2n}+k^n+1\),\(k^{4n}+k^{2n}+1\),\(k^{6n}+k^{3n}+1\) 均不为 \(0\),则可以直接解出 \(x\)。
发现 \(p=7,19\) 的时候跑不出来,所以直接暴力。
所以,随机 \(k\),直到上述四者均不为 \(0\),即求得一组解,为什么能过?我不知道。
算法二
官方题解,考虑钦定 \(x=ta,y=tb,z=tc\),随机 \(a,b,c\),那么,第二个条件可以变为:
同样的,如果 \(a+b+c\),\(a^n+b^n+c^n\),\(a^{2n}+b^{2n}+c^{2n}\),\(a^{3n}+b^{3n}+c^{3n}\) 均不为 \(0\),那么我们可以得到 \(t\),从而解出答案。
随机成功的概率是 \(1/4-O(1/p)\),具体证明不想写了,看官方题解吧。
E. All Pair Shortest Paths
考虑分治,定义 \(\text{solve}(l,r)\) 表示求 \([l,r]\) 内所有点对的最短路。
求区间中点 \(mid\),从 \((1,mid)\) 和 \((2,mid)\) 出发各找一遍最短路,记其分别为 \(d_1(u)\) 和 \(d_2(u)\)。
我们只统计跨越区间中点的最短路,剩下的交给后续的分治过程。
对于一个左边的点 \(x\),一个右边的点 \(y\),他们之间的最短路就是 \(\min(d_1(x)+d_1(y),d_2(x)+d_2(y))\),考虑什么时候前面的会是较小值,可化为 \(d_1(x)-d_2(x)\le d_2(y)-d_1(y)\),那么可以直接排序扫一遍求出这些最短路。
由此,本题在 \(O(n\log n)\) 的时间复杂度内解决。
上面是口胡,代码还没写。