AtCoder Beginner Contest 194参加記(~F問題)
Fがむずすぎる
青パフォ
B - Job Assignment
問題文を読んだ時点で、計算量がでも解けることを確信したので制約を見ていなかった。実はでも通るらしい。こういうところで実装をサボらないとなんだか損した気分になる。
コンテスト中は場合分けしてで解いた。
1. 仕事 A と仕事 B をそれぞれ別の従業員に割り当てる場合
の最小値を、の最小値をとする。
分で仕事ができる従業員と、分で仕事ができる従業員がそれぞれ別になるように割り当てられるか調べる。具体的には、
・となるようなが2個以上ある場合
・となるようなが2個以上ある場合
・となるようなが1個のみ かつ となるようなが1個のみ かつ
のどれかの場合、答えはとなる。上記に当てはまらない場合、を満たす従業員が仕事Aか仕事Bを行うのは確定しているので、従業員を除いた人の中で一番早く仕事Aもしくは仕事Bをこなすことができる従業員をkを探す。よって答えはとなる。
2. 仕事 A と仕事 B をどちらも同じ従業員に割り当てる場合
答えはの最小値である。
これらの答えの最小値が最終的な答えである。
計算量で解くなら、従業員のペアを全探索してシミュレーションし、その最小値を求めればよい。
C - Squared Error
式が正しいかどうか自信が無いがとりあえず書いておく(間違ってたらごめんなさい)。
式変形すると、
となる。
ここで、
であり、
である。これは累積和を用いることでで求められる。(参考:過去問に下位互換となる問題が出題済み。C - Sum of product of pairs)
よって全体でも計算量で答えを求めることができる。
D - Journey
わかってないけどAC。
まだ選ばれていない頂点が選ばれると、「すでに選ばれた頂点の集合(連結)」と連結になる。つまり、最初に高橋君がいる頂点1以外の頂点をすべて選ぶまでの回数の期待値は?という問題になる。これはたしかガチャコンプ問題とかいう名前(俗称)がついていて、結構頻繁に出題されている(のに、未だに理解できていない)。
期待値の求め方がわからないので「期待値 回数 計算」でググると高校数学の美しい物語さんがヒットする。
mathtrain.jp
ここにそのまま答えが書いてある。どうやら期待値は漸化式を使って表現できるらしい。種類すでに引いている場合の期待値を考えると上手くいく?
とりあえず漸化式が立てばそれを更新していくだけなので、計算量はである。
期待値の問題が苦手ということがわかったのでどこかで特訓したい(しない)
E - Mex Min
数列のなかで、連続する個のの最小値は?という問題。
関数の定義より、個ある整数の中に、とある整数が含まれていなければ、関数の返す値は少なくとも以下となることがわかる。なので、からまでの整数それぞれに対して、が含まれない区間の長さの最大値が求められれば良い。これは、数列を前から舐めていって、各整数の直前の出現位置をメモしておけば解くことができる。
あとはから小さい順に、整数が含まれない区間の長さの最大値は以上かを判定してやればよい。
計算量は、。
F - Digits Paradise in Hexadecimal
桁DPっぽさがある。
dp[i桁目まで確定][N未満フラグ][Leading Zeroを抜けたかフラグ][iビット目:iをすでに含んでいるか?を保持するフラグ(16bit)] := 総数
とすると解けそうだが、計算量が(dはd進数であることを示す、本門ではd=16)程度になり、これは回程度の計算が必要になるので間に合わない。
どうやら桁DPをしなくても解けるらしい。わかりません。
感想
Bがむずすぎる