かしのブログ

競技プログラミングとか

CODE FESTIVAL 2017 Final C - Time Gap

問題

 N+1人のうち、高橋くんとその他 N人の時刻 d_iの差(日付は気にしない)は D_i時間である。 N+1人のうちの任意の2人の時差の最小値 sをの最大値を求める。

atcoder.jp

考察

 D_i = \min(d_i, 24-d_i)より、 D_i = 0, 12ならばそれぞれ d_i = 0, 12、その他において d_i = D_i, 24-D_iである。

時差が D_i = 0, 12人が2人以上(ただし D_i = 0のときの1人は高橋くん)、その他で同じ値をとる人が3人以上いるなら、鳩の巣原理より、同じ時間の人が2人以上いることがわかる。よって答えは0。

そうでないなら、参加人数は高橋くんを含めて24人以下になっている。 また、同じ時刻に2人がいる必要はないので、 D_i = Dが2人いるなら、それぞれを D, 24-Dに固定してよい。 これで、まだ未定の人は最大でも11人になるので、全探索で十分高速に求められる。

実装

atcoder.jp