Toy と帽子と ADP BE

主にプログラミングに関わる話をゆるくエモくやっていきます

AtCoder Beginner Contest 172

4完。83:53。

Dに1時間以上かかってしまった・・・。

各問題

A - Calc

計算するだけです。

B - Minor Change

一文字ずつ比較して、異なる数を答えます。まさにB問題って感じのやつですね。

C - Tsundoku

累積和を取って、Aを全パターン試します。Bの適切な値は二分探索で取ってこれますから、O(NlogM)でいけます。(Editorialの解法の方が、線形で求まるのでより速いですね)

ここまでは調子がよかったのですが・・・。

D - Sum of Divisors

最初、初期値1を入れた配列を用意して、2からnまでの数についてその倍数に当たるところをインクリメントする、という方針で約数の数を求めました。

    vector<long long> b(n + 1, 1);
    for (ll i = 2; i <= n; i++) {
        for (ll j = i; j <= n; j += i) b[j]++;
    }

あとは、k * f(k) を計算するだけです。

これ想定解じゃないですよ、ね?

なお、この回答に至るまでに、約数列挙じゃ間に合わんし、素数列挙とかいっても素数の数も膨大にありそうだし、とか無駄なことをいろいろ考えてめちゃくちゃ時間を浪費しました・・・。

まとめ

うーん、Cがかなり早かったようなので、Dの考察が上手くいかなかったのがもったいなかったですね。

まあ今日は体調もよくなく某所の役員としての業務も果たしつつという状況での参戦にもかかわらず、水パフォは死守できたのでよしとしましょう。

f:id:mdstoy:20200627230152p:plain