KUPCの問題を見る前にこちらの問題を見てしまったため、コーディング時間は20分ですが実際に掛かった時間は不明です。すみません。
問題文には明記されていませんが、たとえば[8,1]卓に2人を入れることは可能です。
あと、最後の出力をするときは人を掃き出してはいけないのがポイント。最初clear_table()をtake_turn()に組み込んではまりました。
採点は、
https://github.com/cielavenir/procon/blob/c348846381e01a638a1854c24c8658e5a09c522b/hena/tyama_hena_validator.cpp
https://github.com/cielavenir/procon/blob/c348846381e01a638a1854c24c8658e5a09c522b/hena/tyama_hena_validator_test_mtsmfm151022.cpp
https://github.com/cielavenir/procon/blob/c348846381e01a638a1854c24c8658e5a09c522b/streambuf_fromfile.h
を用意して、
g++ -O2 tyama_hena_validator.cpp tyama_hena_validator_test_mtsmfm151022.cpp -I. -DSTREAM_PORTABLE
として、a.out ruby mtsmfm151022.rb
とします。
(採点プログラムv2は使えません)
#!/usr/bin/env ruby
#https://gist.github.com/mtsmfm/4b8ffb53ffac055f5843
N=8
def fill_table(a,n)
idx=N.times.find{|st|n.times.all?{|i|a[(st+i)%N]==0}}
if idx
n.times{|i|a[(idx+i)%N]=1}
true
else
false
end
end
def clear_table(a)
N.times{|i|
a[i]=0 if a[i]==4
}
end
def take_turn(a)
N.times{|i|
a[i]+=1 if a[i]>0
}
end
if __FILE__==$0
while gets
a=[0]*N
$_.chomp.chars{|c|
clear_table(a)
f=fill_table(a,c.to_i)
take_turn(a)
redo if !f
}
puts a.map{|e|e==0 ? 0 : 1}*''
STDOUT.flush
end
end