投稿者 NOSS | 2019-03-20
2019/3/20に行われた部内コンテストに出題された問題の概要と解説です
コンテストのリンクはこちら
A問題
人の友人とパーティをします。人はケーキを持ってきており番目の友人が持っていたケーキの数は個です。全員で均等にケーキを分け私は優先的に切れもらえるとき、いくつのケーキをもらえるか求めよ。
の総和をで割った値の切り上げが答え。
B問題
概要
以下の素数のうちが素数となるようなの組の個数を求めよ。
解説
がともに奇数であるとき、奇数+奇数=偶数のため素数であることはありません。
よって奇数+偶数しかありえないためは必ず用います。
を固定して片側を全探索すればよいです。
計算量は
C問題
概要
長さの数列に対してつの要素を交換する命令が個与えられる。最初に数列が昇順になるのは何回目の命令か求めよ。
解説
昇順になった状態は一意に定まるためこれを事前に求めておきます。
ソート済の数列と元の数列の同じ位置を比較して、異なるものが個になったとき昇順になったと判定できます。
命令後に変化するのは要素のみのため毎回この差分のみを計算すればよいです。
計算量は
補足:おそらく でも解けますが実装がやや面倒そうです。
D問題
概要
文字列が与えられる。が猫の鳴き声か判定したい。猫の鳴き声は次のように定義される。
- 空文字列"“は猫の鳴き声
- X,Yが猫の鳴き声ならば、’m'+X+‘e’+Y+‘w’は猫の鳴き声
- 以上で定義されるものだけが猫の鳴き声
が猫の鳴き声ならば"Cat"そうでなければ"Rabbit"と出力せよ。
- は’m’,‘e’,‘w’のみを含む
解説
の部分文字列が猫の鳴き声のとき、そこを空文字列に置き換えてもが猫の鳴き声かどうかは変わりません。なのでの猫の鳴き声の部分を消去していって簡単に判定できるものまで小さくすればよいです。つまり、消去していって最終的な状態が"mew"になっていれば猫の鳴き声です。
消すときは’m’+X+‘e’+Y+‘w’を守るように、“mmewe"を"me"に、“emeww"を"ew"に置換するようにします。
BNFで表されるものは木構造をしているので再帰的な方法でも解けます。
E問題
概要
枚の紙があり、番目の紙をスキャンするのにかかる時間はである。3台のスキャナーを並列に使用したとき、すべての紙をスキャンするのにかかる時間を最小化せよ。
解説
1番目の紙から順に割り振っていくことを考えてみます。ある時点で区切ったときそれまでどう割り振ったかはその後どう割り振れるかに影響しないのでDPができそうです。なのでそれぞれのスキャナーにどれだけ仕事を割り振ったかを持てばよさそうです。
「=番目の紙まで見てそれぞれのスキャナーに分の仕事を割り振ることが可能か」と置きます。で可能なもののうち、の最小値が答えです。
問題はがどれほどの大きさになるかです。最大ケース を考えるとこの解はなので少なくとも解はこれ以下です。
しかし、は計算量が大きすぎます。そのため工夫が必要です。
の関係を見ると が成り立つので より でを復元できます。よっては省略することができます。すると最大でもに落ちるのでこれは間に合います。
遷移はのとき
です。
計算量は になります。
F問題
概要
本国の首都から姫のいる町まで冷凍された血液を届ける。血液は最大分間冷凍しなくても無事である。冷凍しないで1分輸送するごとに無事な残り時間は分減る。冷凍施設のある町では分冷凍するごとに無事な残り時間が分回復する。
血液の冷凍状態を保ったまま輸送するときの首都から姫のいる町への最短時間を求めよ。
- 多重辺、自己ループはない
ただしは町の数、は再冷凍を行うまでの制限時間を表す。
解説
グラフの最短経路問題ですが、冷凍時間の制約があるため単純には解けません。
そこでグラフを拡張します。を頂点に冷凍残り時間で到達するときの最短時間とすると、頂点からへ時間かけて移動するとき
というような遷移が考えられます。また、再冷凍可能な町では
という遷移ができます。これはダイクストラ法などで解が求められます。
計算量はダイクストラ法で
コメント
B: 意外と偶奇性に気づきにくいです。
C: 1回の命令で変化するものが少ないことに注目します。
D: 構文解析。( )系問題の発展です。
E: DPですが、変数を減らす工夫が必要なので難しいです。
F: 拡張ダイクストラの典型です。
by NOSS