Official
D - 456 Editorial
by
D - 456 Editorial
by
kyopro_friends
\(3\) つのサイコロの各面を区別することにすると、出目の出方は \(6\times 6\times 6=216\) 通りあります。この \(216\) 通りを全探索し、出目が \(4,5,6\) になっているかを判定しましょう。
判定方法としては、出目の組み合わせ \(6\) 通りを全て確かめる方法の他、「集合として一致しているか」「ソートして \((4,5,6)\) になるか」「積が \(120\) か」などもあります。
言語によっては小数を出力する方法に注意してください。
実装例 (C++)
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[3][6];
for(int i=0; i<3; i++){
for(int j=0; j<6; j++) cin >> a[i][j];
}
int ans = 0;
for(int i=0; i<6; i++){
for(int j=0; j<6; j++){
for(int k=0; k<6; k++){
if( (a[0][i]==4 && a[1][j]==5 && a[2][k]==6)
|| (a[0][i]==4 && a[1][j]==6 && a[2][k]==5)
|| (a[0][i]==5 && a[1][j]==4 && a[2][k]==6)
|| (a[0][i]==5 && a[1][j]==6 && a[2][k]==4)
|| (a[0][i]==6 && a[1][j]==4 && a[2][k]==5)
|| (a[0][i]==6 && a[1][j]==5 && a[2][k]==4)){
ans++;
}
}
}
}
printf("%.10f\n", ans/216.0);
}
実装例 (Python)
A = []
for _ in range(3):
Ai = list(map(int, input().split()))
A.append(Ai)
ans = 0
for x in A[0]:
for y in A[1]:
for z in A[2]:
if sorted([x, y, z]) == [4, 5, 6]:
ans += 1
print(f"{ans/216: .10f}")
posted:
last update:
