您的位置:首页 > 其它

Dice Throwing

2013-09-03 14:55 190 查看
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=30506#problem/G

#include<math>
#include<set>
#include<list>
#include<cmath>
#include<ctime>
#include<deque>
#include<stack>
#include<bitset>
#include<cstdio>
#include<vector>
#include<cstdlib>
#include<cstring>
#include<iomanip>
#include<numeric>
#include<sstream>
#include<utility>
#include<iostream>
#include<algorithm>
#include<functional>

using namespace std ;
long long sum , ans , dp[ 30 ][ 155 ] ;
int n , m ;
long long Gcd( long long a , long long b )
{
return b == 0 ? a : Gcd( b , a % b ) ;
}
int main()
{

while( scanf( "%d%d" , &n , &m ) != EOF )
{
if( !n && !m )
break ;
if( n * 6 < m )
{
printf( "0\n" ) ;
}
else if( n >= m )
{
printf( "1\n" ) ;
}
else
{
sum = pow( 6 , n ) ;
memset( dp , 0 , sizeof( dp ) ) ;
for( int i = 0 ; i <= 6 ; ++i )
dp[ 0 ][ i ] = 1 ;
for( int i = 0 ; i < n - 1 ; ++i )
{
for( int j = 1 ; j <= ( i + 1 ) * 6 ; ++j )
{
for( int k = 1 ; k <= 6 ; ++k )
{
dp[ i + 1 ][ j + k ] += dp[ i ][ j ] ;
}
// cout << dp[ i ][ j ] << endl ;
}
}
ans = 0 ;
for( int i = m ; i <= n * 6 ; ++i )
{
ans = ans + dp[ n - 1 ][ i ] ;
// cout << ans << endl ;
}
// cout << ans << endl ;
long long gcd = Gcd( ans , sum ) ;
// cout << ans << " " << sum << endl ;
// cout << gcd << endl ;
printf( "%lld/%lld\n" , ans / gcd , sum / gcd ) ;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Number Theory2 of bo