カメヲラボ

主にプログラミングとお勉強全般について書いてます

The Drunk Jailer(0)

http://acm.pku.edu.cn/JudgeOnline/showproblem?problem_id=1218

酔っ払い看守

鍵の掛かったN個の独房がある。看守はN杯のウィスキーを飲むのだが、一杯目を飲んだ時はN個すべての独房の鍵を開ける。2杯目飲んだ時は、2,4,6...番目の独房の、A:鍵が掛かっていたら開ける B:鍵が開いていたら(鍵を)掛ける。3杯目を飲んだ時は、3,6,9...番目の独房について、A・Bを行う。4杯目は4,8,12...番目の独房について・・・というような動作をN回繰り返し、N杯目が終わったところで酔いつぶれて終わり。最終的に鍵の開いた独房はいくつあるかという問題だ。


たとえば独房が6つあったとする。
鍵が開いている・・・○
鍵が掛かっている・・・×とすれば、


N杯:独房1 独房2 独房3 独房4 独房5 独房6
 1 :  ○   ○   ○   ○   ○   ○
 2 :  ○   ×   ○   ×   ○   ×
 3 :  ○   ×   ×   ×   ○   ○
 4 :  ○   ×   ×   ○   ○   ○
 5 :  ○   ×   ×   ○   ×   ○
 6 :  ○   ×   ×   ○   ×   ×
という風に、最終的には独房1と4の鍵が開いていることになる。


この問題は、最終的に63バイトという超短いコードで出来るのだがいきなりはさすがに難しい。とりあえず単純なコードを書くところからはじめてみよう。