2020年1月16日木曜日

CODE FESTIVAL 2016 Relay H - 早起き

T=0T=0の場合に高橋君が起きる時刻をc1,c2,...,cNc_1, c_2, ..., c_Nとする。数列(ci)(c_i)全体に定数を足して(または引いて)、mod  86400\mod 86400{0,1,...,10800}\{ 0, 1, ..., 10800\}に含まれるようなcic_iの数を最大化すればよい。ところで、(ci)(c_i)の代わりに後者に定数を足すと考えてもよい。つまり、cic_imod  86400\mod 86400で分類した時に、[x,x+10800][x, x+10800]に含まれるcic_iの数を(xxを動かして)最大化する問題と考えられる。調べる範囲はx=0,1,...,86399x=0, 1, ..., 86399でよく、累積和で処理しておけば各ステップはO(1){O}(1)で済む。