ARC 102 C - Triangular Relationship

解法

コンテスト中は, ひたすらaを固定してb,cの数を数える方法を探していた.
まず, 問題文を式に表してみると,
 a + b = n_1K
 b + c = n_2K
 c + a = n_3K
aを固定してみたときとりあえずb,c
 b = n_1K-a
 c = n_3K-a
表すことができる. また,
b + c = n_1K-a + n_3K-aより
2a = n_1K-n_2K + n_3Kが成り立ちます.
また, 条件から各a,b,cについて
 1 \leq a,b,c \leq Nより
bについて
 1 \leq n_1K - a \leq N
が成り立ち, cについても対称性から同じものが成り立ちます. これを変形すると, n_1について
 \frac{a+1}{K} \leq n_1 \leq \frac{N+a}{K}
となり, n_3についても
 \frac{a+1}{K} \leq n_3 \leq \frac{N+a}{K}
が成り立つ必要があります.
いま, aを固定しているため, 不等式からn_1n_3が取りうる値の数を求め, 掛けあわせれば場合の数を求めることができます(同じ式の形なので, 片方を求めて二乗すればよい).
しかし, 式
 b = n_1K-a
 c = n_3K-a
aを固定することにより得ているので正しいが,
2a = n_1K-n_2K + n_3K = (n_1-n_2+n_3)K
は, aKの値によっては成り立たない場合があります.
2aKの倍数でないときはこの式を満たすことはできません. 逆に, 2aKの倍数のときは, 両辺をKで割り, n_2を導出することができるため, 2aKで割り切れることは, この式を満たす必要十分条件となっています.
よってその場合のみ数を数えないことにします.
これを1 \leq a \leq Nについて行い, すべての場合の数を足しこむと答えが得られます.

感想

早ときしたかったが, 頭が足りなかった. 想定解法ではさらに踏み込んだ数学をして数えるものを単純化している. Twitterでも想定解法の人が多く, 自分がみている限り, この解き方をしている人は少なかった. 想定解法ではO(1)だが, 自分の解法ではO(N)かかる. 制約がもう少し厳しければ想定解法に近づけたかもしれないが, 負け惜しみである.