\[\large \text{Round 6 : AtCoder Beginner Contest 315} \]
一言:
愿悲 、爱恋、你和宇宙以及那颗星辰,能够永远拥抱我们。
——THE BEYOND-機動戦士ガンダム40周年纪念曲
这场打的一般,主要还是一开始网卡爆了把心态弄得很不好,一定程度上影响了发挥。
\(\text{G: Ai + Bj + Ck = X (1 <= i, j, k <= N)}\)
这题其实还是很好想的,主要问题出现在实现上面。
我们可以考虑枚举 \(i\),那么接下来就会得到一个式子 \(\text{Bj + Ck = x - Ai}\)。显然,我们可以通过扩展欧几里德得到一组通解 \(y,z\)。
那么对于每一个整数 \(p\),就会有 \(B\times y+C\times z=B\times (y-p \times \dfrac{C}{\gcd(B,C)})+c\times (z+p\times \dfrac{B}{\gcd(B,C)})=x-Ai\)
实际上就是要你求出有多少个 \(p\) 满足 \(1 \le y-p \times \dfrac{C}{\gcd(B,C)} ,z+p\times \dfrac{B}{\gcd(B,C)}\le n\)。其实可以把它转化为当 \(p<0\) 以及 \(p \ge0\) 两种情况分别讨论,这样做会方便不少。
\(\text{What I learned:}\)
-
以后 AT 网卡的时候,尝试重启电脑吧,亲测有效。
-
对于给定三个数 \(i,j,k\) 合在一起的限制,要求方案,可以考虑枚举 \(i\),算出 \(j,k\) 的一些限制,然后将可能的情况加在一起。
-
\(\text{From Problem E}\),我们发现,如果我们可以采取一些代价减少操作数,那么当你枚举代价时,请明白这个代价最多只需要枚举到总操作数之和,这样可以减少复杂度。