ABC177/C問題
https://twitter.com/yururi0818/status/1323151433273765890 https://twitter.com/kenkoooo/status/1322794737452023811 あたりをタイムラインで見て、「は? 解けるでしょ……」って思って解いてみた。
wrong.cpp#include <iostream>#include <vector> long long const MOD = 1000000000LL + 7; int main(int, char**) { int n; std::cin >> n; long long sum{}, taikaku2{}; for(int i{}; i < n; ++i) { long long e; std::cin >> e; sum += e; taikaku2 += e * e; taikaku2 %= MOD; } std::cout << (sum * sum - taikaku2) / 2 % MOD << std::endl;}列と和ごとに考えたら結局総和の2乗から対角成分の2乗引いて半分にすればいい。
とここまではよかったけど通らない(そもそもサンプル2でおかしい)のでなんでか考えてわかんなかったから解説見て https://atcoder.jp/contests/abc177/submissions/16360498 のL29を見てなるほど〜 って言った。
普通にの上で考えてたら上記のコードでいいんだけど、の上で考える時は単に
/2 したら死ぬね……そうだね……って言った。 https://qiita.com/drken/items/3b4fdf0a78e7a138cd9a#3-3-逆元の求め方の概要 普通素数だから小定理で出るな……とは思いながらググった記事で素数じゃないときの方法読んで「へ〜」って言った。