Codeforces Round #152 (Div. 2)
http://www.codeforces.com/contest/248
またもA,B問題だけ解いた。
A. Cupboards
問題文を読み解くのに時間がかかった・・・。
左右のドアの開閉状況(Open = 1、Close = 0)が与えられる。
左右それぞれのドアをすべてOpen/すべてCloseで揃えるために必要な開け閉めの数を求める。
n = gets.chomp.to_i right = 0 left = 0 n.times do l, r = gets.chomp.split(" ").map{|n| n.to_i} left += 1 if l == 0 right += 1 if r == 0 end puts [(n - left), left].min + [(n - right), right].min
B. Chilly Willy
[2, 3, 5, 7]のすべてで割り切ることができる、n桁で最小の整数を求める。
2 * 3 * 5 * 7 = 210なので、n <= 3のときは考えるまでもない。
それ以降はどうなのか?
試しに210の倍数を桁上りする度に出力してみると、周期性があることがわかる。
1050
10080
100170
1000020
10000200
100000110
1000000050
10000000080
あとはこれを利用するだけ。
def solve(n) return -1 if n <= 2 return 210 if n == 3 bases = ["050", "080", "170", "020", "200", "110"] return "1" + "0" * (n - 4) + bases[(n - 4) % 6 ] end n = gets.chomp.to_i puts solve(n)