AtCoder Regular Contest 153 C問題 ± Increasing Sequence
問題
提出解答
問題の概要
個の整数 は全て または である.
以下を満たすような整数列 は存在するか? 存在するならばその一例を求めよ.
- に対して,
制約
解法
この問題において, 必要ならば の全ての符号を反転させることによって, と仮定しても一般性を失わない. 以降ではこの仮定のもとで問題を解くことにする.
を とする. また, 見やすさのため, とする.
ここで, 整数列 に対して, 第 項以降に一様に を加えた整数列の総和は の総和に を加えたものになることを利用して存在する場合の一例を構築する.
のとき
この場合は必ず存在する.
長さ の整数列 を次のように定める.
- に対しては とする.
- を で割ったあまりを とする. このとき, とする.
このようにすると, は以下を満たす.
- であるから, は の倍数である.
そして, を
と定めると,
であるから, 要求されている条件全てを満たす.
のとき
について, 以下のような場合分けが発生する.
(a) 任意の に対して, の場合
条件を満たす列 が存在したとする.
このとき, である を昇順に , である を昇順に とする. すると, 場合分けの仮定から, に対して, であるので,
となってしまい矛盾する. よって, 条件を満たす列 は存在しない.
(b) ある が存在して, の場合
の定め方から, となる が存在する. このとき, として, を ならば , ならば, とすると, 以下の が条件を満たす.
実際,
である.
なお, この場合分けの条件と となる が存在することは同値になる.
以上のようにして計算量 時間で存在判定及び構築ができた.