POH vol.7
ヤバい嫁ドロイドがかわいい。
水着
最初は小難しく考えてたけど、意外とすんなり解いた。でもrubyのおかげっていう点が多い気がする。
https://paiza.jp/poh/ando/share/2a940576
def answer(n) return 1 if n < 2 t = (2..n).to_a until t.size == 1 t = t.each_slice(10).map {|v| f = v.compact.inject(1,&:*) f /= 10 while f % 10 == 0 f % 10 ** 11 } end t.first % 10 ** 9 end puts answer(gets.to_i)
基本的には小分けにして積をとって末尾の0を削るというのを繰り返す。
10個ずつ取ると5の倍数が2つ含まれるけど、2,4,6,8の倍数が必ず含まれるので、5^7までは確実に削れる。
一回目のループでは小分けにした計算結果に5の倍数が含まれる場合もあるだろうけど、
余裕をもって10の11乗位で割って、最後に10の9乗で余りをとればよい。
コーナーケースがありそうだけど、5 ** 8とかでも大丈夫だった。
サンタ
最初each_consとeach_slice間違えたのは内緒。
https://paiza.jp/poh/ando/share/b0b60846
x,y,z,n = gets.split.map(&:to_i) cx = [] cy = [] n.times do d, a = gets.split.map(&:to_i) if d == 0 cx << a else cy << a end end cx << 0 << x cy << 0 << y cx.sort! cy.sort! minx = cx.each_cons(2).map{|i,j| j-i}.min miny = cy.each_cons(2).map{|i,j| j-i}.min puts minx * miny * z
メガネ
やっぱりメガネだよね。メガネ Getが一番うれしい。
https://paiza.jp/poh/ando/share/069acb96
m = gets.to_i mm = m.times.map { gets.split.map(&:to_i) } n = gets.to_i nn = n.times.map { gets.split.map(&:to_i) } (0 .. m - n).each do |ox| (0 .. m - n).each do |oy| b = (n ** 2).times.all? {|i| x,y = i.divmod(n) mm[oy + y][ox + x] == nn[y][x] } if b puts "#{oy} #{ox}" break end end end