ABC177/C問題

ABC177/C問題

https://twitter.com/yururi0818/status/1323151433273765890 https://twitter.com/kenkoooo/status/1322794737452023811 あたりをタイムラインで見て、「は? 解けるでしょ……」って思って解いてみた。
wrong.cpp
Copied!
#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-逆元の求め方の概要 普通素数だから小定理で出るな……とは思いながらググった記事で素数じゃないときの方法読んで「へ〜」って言った。

Powered by Helpfeel