Thursday, September 17, 2015

UVa 10759 - Dice Throwing

// UVa 10759 - Dice Throwing

#include <iostream>
using namespace std;

#define datatype unsigned long long int

datatype gcd(datatype a, datatype b) {
	if (b == 0)
		return a;
	else
		return gcd(b, a % b);
}

int main() {
	int n, m;
	cin >> n >> m;
	while (n) {

		datatype T[25][151];

		T[0][0] = 1;
		for (int i = 1; i <= n; i++)
			T[i][0] = T[i - 1][0] * 6;
		for (int j = 1; j <= m; j++)
			T[0][j] = 0;

		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= m; j++) {
				T[i][j] = 0;
				for (int k = 1; k <= 6; k++) {
					int kk = min(k, j);
					T[i][j] += T[i - 1][j - kk];
				}
			}
		}

		datatype a = T[n][m];
		datatype b = T[n][0];
		if (a == 0)
			cout << 0 << endl;
		else if (a == b)
			cout << 1 << endl;
		else {
			datatype g = gcd(b, a);
			a /= g;
			b /= g;
			cout << a << "/" << b << endl;
		}

		cin >> n >> m;
	}
	return 0;
}

No comments:

Post a Comment