题意:
求n个色子撒出和至少为x的概率。
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <stack>
#include <vector>
#include <queue>
#include <map>
#include <climits>
#include <cassert>
#define LL long long
using namespace std;
const int maxn = 24 + 10;
const int maxx = 150 + 10;
LL f[maxn][maxx];
int n, x;
void init()
{
memset(f, 0, sizeof(f));
for (int d = 1; d <= 6; d++)
for (int j = d + 1; j < maxx; j++)
f[1][j] += 1;
for (int i = 2; i < maxn; i++)
for (int d = 1; d <= 6; d++)
for (int j = d + 2; j < maxx; j++)
f[i][j] += f[i - 1][j - d];
}
LL gcd(LL a, LL b)
{
return b ? gcd(b, a % b) : a;
}
int main()
{
#ifdef LOCAL
freopen("in.txt", "r", stdin);
#endif // LOCAL
init();
while (~scanf("%d%d", &n, &x))
{
if (!n && !x)
break;
LL mu = 1;
LL zi = 0;
for (int i = 1; i <= n; i++)
mu *= 6;
zi = mu - f[n][x];
LL d = gcd(mu, zi);
mu /= d;
zi /= d;
if (zi == 0)
printf("0\n");
else if (mu == 1)
printf("1\n");
else
printf("%lld/%lld\n", zi, mu);
}
return 0;
}