ABC162バチャ参戦

ABC162のバーチャル参加をしました。今回試験的に雑な脳内実況復元をしようと思います。ちなみに結果はABCDFが解けて1600点、Eもその10分後ぐらいに解けました。青さん?

A - Lucky 7

  • 各位の数字がわかればいい
  • %10で1の位を求める->/10をして1の位を「消す」(325->32みたいな)を3回すればOK
    atcoder.jp

B - FizzBuzz Sum

  • 問題読んでもよく分からなかったが例見たらわかった
  • 3,5,15で割り切れると数字じゃなくなるので、3でも5でも割り切れない数を足せばおk
    atcoder.jp

C - Sum of gcd of Tuples (Easy)

  • シグマの3重入れ子、添え字の範囲は1~200、3乗しても8×106
    なら愚直にやってもいけるやろ(適当)
    atcoder.jp

D - RGB Triplets

  • つまりS _ {i},S _ {j},S_{k}R,G,Bの入れ替えね
  • とりあえず1番目の条件を満たす(i,j,k)の組の数は
    (Rの数)×(Gの数)×(Bの数)でいいのかな...あー、i<j<kの条件にひっかかる組を数えそうで怖いな(editorialの言う通り、冷静に考えるとこれで合ってた)
  • DP _ {p,k} := S _ {k}~S _ {N-1}のうち文字pの数」とすると、「S _ {i} \neq S _ {j}ならばDP _ {p,j+1},pS _ {i}でもS _ {j}でもない文字 を足していく」をfor2重すれば求められる(O(N2)はセーフ)
  • 二個目の条件は...i,kを決めて「k - j = j - iかつS _ {i},S _ {j},S _ {k}が相異なるjが存在->answer--」をfor2重
    atcoder.jp

F - Select Half

  • editorialに書いてあるDP _ {i,j}をO(N2)で求めないとだめか?
  • ...と思ったが、下の5通りを考えれば十分
    f:id:ano3:20200413123727j:plainf:id:ano3:20200413123731j:plain
    字汚くてごめんね
  • よって「DP' _ {n} := A _ {0},\cdots,A _ {n}でのmax」と「sum _ {2n} := a _ {0} + a _ {2}+\cdots +a _ {2n}」とを計算すれば求まる
    atcoder.jp

延長戦: E - Sum of gcd of Tuples (Hard)

  • 「すべての項のgcd=gの数列の集合P(g)」とおき、g\times n(P(g))を足し合わせたい
  • P(g)」は、「すべての項がgで割れる数列の集合Q(g)」から「すべての項がgで割れ、かつgcdがgでない数列集合(*)」を除いたもの
  • (*)って何?...絶対この数列のgcdは2*g,3*g,...のはず(一般にkA _ {i}の公約数ならばgcd(A _ {i})kの倍数なので)、またgcdが2*g,3*g,...ならばP(g)に属する、
    つまり(*) = P(2g)\cup P(3g) \cup \cdots,P(g) = Q(g)\backslash (P(2g)\cup P(3g) \cup \cdots)
  • かつP(mg)P(ng)に共通部はない!(ここまできてバチャが終わった)
  • ということはn(P(g)) = n(Q(g))-n(P(2g))-n(P(3g))-...では
    n(Q(g))は単に累乗で求められるのでn(P(g))を後ろから求めていこう
    atcoder.jp

    Eみたいな問題慣れてないからちゃんとやらないとなあ...
    来週こそはちゃんと時間通り出ます