您的位置:首页 > 其它

uva 10759 Dice Throwing

2014-08-01 16:17 190 查看
首先打表得到每个和所占的份数,然后约分。因为分母(6^i i表示骰子个数)的质因数为2和3,所以只要对2和3进行约分即可。

注意无符号数的输出格式。

#include <iostream>
#include<stdio.h>
#include<cmath>
using namespace std;

//c[i][j]表示扔i个骰子能得到的和为j的份数,总份数为6^i
unsigned long long c[30][160];
void table()
{
for(int i = 1; i <= 6; i++) c[1][i] = 1;
for(int i = 2; i <=24; i++)
for(int k = 1; k <= 6; k++)
for(int j = 1; j < 150; j++)
if(c[i - 1][j])
c[i][j+k]+=c[i-1][j];
}

int main()
{
table();
int n,x;
unsigned long long ans1,ans2;
while(scanf("%d %d",&n,&x),n+x)
{
if(n>=x) printf("1\n");
else if(n*6 < x) printf("0\n");
else
{
ans1 = 0;
for(int i = x;i<150;i++)
{
ans1+=c
[i];
}
ans2 = (unsigned long long)pow(6,n);
while(ans1%2==0 && ans2%2 ==0){ans1/=2;ans2/=2;}
while(ans1%3==0 && ans2%3 == 0){ans1/=3;ans2/=3;}
printf("%llu/%llu\n",ans1,ans2);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: