人工知能と競プロやってくブログ

深層学習・機械学習・AI・atcoder・競技プログラミングについて調べてやってみたことをまとめるブログです

AtCoder Beginner Contest 177 [ C - Sum of product of pairs ]をPythonで解く(300点、⬜️灰色diff)

問題

atcoder.jp

解法

制約が N ≤ 2×105なので、普通にシミュレーションするとO(108)超えるのは目に見えてる。
なので、計算量を減らす工夫をする必要があるんだけど、これは解法みないとわからなかったー。

数列A = { 3, 1, 4 }
とする。
答えは 3 x 1 + 3 x 4 + 1 x 4 = 19

f:id:uchidamax:20210708021302p:plain
ABC177C
要素ごとの積をマトリクスにすると、こんな図になる。
下の三角部分の合計が答え。

f:id:uchidamax:20210708021324p:plain
ABC177C_2
このマトリクスの各辺の長さをAの値を反映させると見た目がわかりやすくなる。
全体の面積は、Aの合計 x Aの合計。
あとは対角線部分の値を引いて、2で割れば答えが出る。

この計算量減らす方法は、知らんかったなー。
なるほどね。

実装

参考

youtu.be