問題
問題文
$1,2,\dots,6$ の出目がある $6$ 面サイコロを $A$ 回振ったとき、出た目の合計が $B$ になることはありますか?
制約
・$1 \le A \le 100$
・$1 \le B \le 1000$
・$A,B$ は整数である。
回答
回答1 (AC)
サイコロを $1$ 回振ったときの出目は $1$ 以上 $6$ 以下なので、$A$ 回振ったときの出目は $A$ 以上 $6A$ 以下となります。従って、サイコロを振る回数を a 回、出目の合計を b とするとき、b が出目の合計としてあり得るための条件は a<=b かつ b<=6*a となり、これを判定すれば良いことがわかります。コードは以下のようになり、無事、ACとなりました。なお、私が ABC 208 に参加したときの提出コードも同じ方針で作成しました。
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
if ( a<=b and b<=6*a ) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
}
おまけ
$B$ が出目の合計値としてふさわしいとき、具体的な目の出方(の一例)を求めます。サイコロは $A$ 回振ったので、$B$ を $A$ で割った商を $q$, 余りを $r$ とおく (つまり $B=Aq+r~(0 \le r <A)$ ) とおくと、毎回の目を $q$ とすると合計値は $r$ だけ不足します。そこで、目 $q+1$ が $r$ 回、目 $q$ が $A-r$ 回出れば、出目の合計は $(q+1)r+q(A-r)=qr+r+qA-qr=r+qA=B$ となります。
例えば $A=4, B=23$ の場合、$23=4\times5+3$ なので、$q=5, r=3$ であり、$5, 5, 5, 4, 4$ という出目のパターンを得ることができます。
調べたこと
AtCoder の解説 → 公式解説
回答と同じ方針でした。
リンク
ABC 208 関連情報
前後の記事
- 前の記事 → AtCoderログ:0006 - ABC 208 に参加しました
- 次の記事 → AtCoderログ:0008 - ABC 208 B