Dice Rolling [ Educational Codeforces Round 56 (Rated for Div. 2) A ]
問題
2~7の数字が書かれた六面体ダイスと、n 個の数字がある。
ダイスを振って、出た目の和でそれぞれの数字を作るとき、何回振れば作ることができるか、それぞれの数字について出力せよ(最小回数ではないことに注意)。与えられる数字は、ダイスの目の和であることが保証されている。
考察
振った回数は関係ないので、ダイスの目を減らして単純化することを考えます。
ダイスは 2,3,4,5,6,7 から構成されますが、このうち、4 と 6 は 2 を複数回出すことで作れるので、消してしまいます。
また、5,7 も同様に 2 と 3 を組み合わせることで作れるので、消してしまいます。
すると、残るのは 2,3 だけです。
つまりこの問題は、2,3 を組み合わせて与えられた数字 x (2<=x<=100)を作ることができるか、という問題に単純化できます。
x が偶数のときを考えます。2以上100以下の偶数は、全て2の倍数になっているので、2を x/2 回出すことで作れます。
x が奇数のときを考えます。2 だけで奇数は作れないので、少なくとも1回以上、3 を出す必要があります。
このとき、3 を何回出せばよいかは x/3 で求まります。2 を何回出せばよいかは x%3/2 で求まります。
コード
void solve (FastScanner in, PrintWriter out) { int n = in.nextInt(); for (int i=0; i<n; i++) { int temp = in.nextInt(); if (temp%2 == 0) { out.println(temp/2); } else { out.println(temp/3 + temp%3/2); } } }