Dice Throwing

发布时间:2016-12-8 10:06:36 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Dice Throwing",主要涉及到Dice Throwing方面的内容,对于Dice Throwing感兴趣的同学可以参考一下。

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; }

上一篇:银行卡技术实现和相关银行卡规范(四)
下一篇:数据结构——邻接矩阵的最小生成树Kruskal算法

相关文章

关键词: Dice Throwing

相关评论