ABC270 E~Ex
E:
当他执行了 \(m\times n\) 次操作,我们称他执行了 \(m\) 轮操作。
显然我们可以二分出最早在第几轮的时候吃掉的苹果不小于 \(k\)。
时间复杂度 \(\mathcal O(n\log k)\)。
F:
显然可以枚举四种情况:不用机场和码头/只用机场/只用码头/机场码头都用。
如果使用机场,就建一个虚点 \(n+1\),对于每个点都连一条边 \((i,n+1,x_i)\)。
如果使用码头同理,也建一个虚点 \(n+2\),对于每个点都连一条边 \((i,n+2,y_i)\)。
公路的边一定要连上。
对于每种情况跑一遍 Kruskal 就好了。
G:
首先 \(S=G\) 直接输出 \(0\)。
当 \(A=0\) 时,有 \(X_i=\left\{\begin{matrix} S\ \ \ \ (i=0) \\ B\ \ \ \ (i\gt0) \end{matrix}\right.\),可以 \(\mathcal O(1)\) 计算。
当 \(A=1\) 时,有 \(X_i=S+Bi\bmod p\),所以 \(i\equiv \dfrac{G-S}{B}\pmod P\),也可以 \(\mathcal O(1)\) 计算。
当 \(A\ge2\) 时,有 \(X_i+\dfrac{B}{A-1}\equiv A(X_{i-1}+\dfrac{B}{A-1})\pmod P\),所以 \(A^i\equiv \dfrac{G+\dfrac{B}{A-1}}{S+\dfrac{B}{A-1}}\pmod P\),可以使用 BSGS 配合哈希表(这里我用了 unordered_map
),可以认为是 \(\mathcal O(\sqrt P)\) 的。
Ex:
假设当前的局面为 \(b_1,b_2,\cdots,b_n\),定义距离 \(k=\max(a_i-b_i)\),表示当前状态和终止状态的距离。
设 \(f(k)\) 表示距离为 \(k\) 的状态期望需要多少步到达终止状态,则 \(f(0)=0\),答案为 \(f(a_n)\)。
假设 \(a_1\le\cdots\le a_l\lt k\le a_{l+1}\le\cdots\le a_n\),即 \(l\) 是最大的小于 \(k\) 的 \(a\) 的位置。
那么假设下一步操作到的 \(i\) 满足 \(1\le i\le l\),那么距离会变成 \(k-1\),否则距离会变成 \(a_i\)。
那么可以得到转移 \(f(k)=1+\dfrac{1}{n}(l\times f(k-1)+\sum_{i=l+1}^{n}f(a_i))\)。
移项可得 \(f(k-1)=\dfrac{1}{l}(n\times f(k)-n-\sum_{i=l+1}^{n}f(a_i))\)。
用 \(k\) 替换 \(k-1\) 可得 \(f(k)=\dfrac{1}{l}(n\times f(k+1)-n-\sum_{i=l+1}^{n}f(a_i))\),其中 \(a_l\le k\lt a_{l+1}\)。
注意到此时边界为 \(f(0)=0\),答案是 \(f(a_n)\),这和转移的顺序不符合。
所以令 \(g(k)=f(a_n)-f(k)\),那么转移变为 \(g(k)=\dfrac{1}{l}(n\times g(k+1)+n-\sum_{i=l+1}^{n}g(a_i))\),边界为 \(g(a_n)=0\),答案为 \(g(0)\)。
直接计算预处理逆元和前缀和优化是 \(\mathcal O(n+V)\) 的,考虑优化。
考虑对于固定的 \(l\),对于所有 \(a_l\le k\lt a_{l+1}\) 转移形式相同,所以考虑设 \(G=\dfrac{\sum_{i=l+1}^{n}g(a_i)-n}{l}\) 是定值。
那么
于是只需依次计算 \(g(a_{n-1}),\cdots,g(a_1)=g(0)\) 即可,在过程中维护 \(\sum_{i=l+1}^{n}g(i)\) 即可做到 \(\mathcal O(n\log \text{mod})\)。