Google Code Jam Qualification Round 2021
できたとこまで.身の丈.受験明け初コンテスト.リハビリにはよかった感がある.
A:Reversort
問題概要
数列{}を下の擬似コードで示されるアルゴリズムでソートする:
for i := 1 to length(L) - 1
j := position with the minimum value in L between i and length(L), inclusive
Reverse(L[i..j])
Reverseのときにコストがj-i+1だけかかる.かかるコストの総和をT個のテストケースそれぞれについて求めよ.
解法
上の擬似コードをお好みの言語で書き直してあげてコストを計算するとできる..
B:Moons and Umbrellas
問題概要
文字列は''C,'J','?'の3文字のみで構成されている.このうち'?'の文字すべてを独立に'C'か'J'のいずれかに置き換える.最終的に完成した文字列が'CJ'を含むとXpt,'JC'を含むとYptのコストがかかる.コストのminは?
解法
'CC'も'JJ'もコスト0なのでHardのケースでなければ'?'が連続する区間を'C'か'J'のみで埋めることでコストがminになることが分かり,これは結局から'?'を抜いた文字列でコストがいくらになるかを考えればよいことになる..Hardは多分文字列DP.この1点が無くても通過できるのでまあ良し.
C:Reversort Engineering
問題概要
A:Reversortの問題について,コストがであるようなを並び替えた順列を1つ出力する問題を個のテストケースそれぞれについて解け.
解法
Easyの方はnext_permutationで全探索すれば解けて.この時点で予選通過は確定したのでHardは出していないががを満たせば構成可能でそうでなければ"IMPOSSIBLE"っぽいことがわかり,Reversortを行う際には順列を前から順にみていくことを考えると順列を構成する際にはを後ろから見ていって構成すればでできそう.Hardは通してないので知らんけど.