結果
| 問題 |
No.58 イカサマなサイコロ
|
| コンテスト | |
| ユーザー |
J31831276
|
| 提出日時 | 2018-12-28 23:06:21 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 1,690 ms / 5,000 ms |
| コード長 | 866 bytes |
| コンパイル時間 | 525 ms |
| コンパイル使用メモリ | 61,104 KB |
| 実行使用メモリ | 6,824 KB |
| 最終ジャッジ日時 | 2024-10-01 15:02:38 |
| 合計ジャッジ時間 | 3,275 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 |
ソースコード
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string>
#include <vector>
#include <numeric>
#define ll long long
using namespace std;
ll T[61];
ll J[61];
//再帰なし累乗
ll pow(int x, int p){
ll result;
for(result=1;p!=0;p>>=1)
{
if(p&1) result*=x;
x*=x;
}
return result;
}
int main(){
int n,k;
cin>>n>>k;
ll po=pow(6,n);
for(ll i=0;i<po;++i){
ll t=i;
ll sumt=0,sumj=0;
for(int j=0;j<n;++j){
sumj+=t%6+1;
if(j<k){
sumt+=t%3+4;
}else{
sumt+=t%6+1;
}
t/=6;
}
T[sumt]++;
J[sumj]++;
}
ll all=po*po;
ll frac=0;
ll rest=0;
for(int i=1;i<=6*n;++i){
ll sum=0;
for(int j=1;j<i;++j) sum+=J[j];
frac+=(T[i]*sum);
}
printf("%.5lf\n",(double)frac/all);
return 0;
}
J31831276