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;
}
#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;
}
相关文章推荐
- 责任链模式(Chain of Responsibility)的标准版
- Validation of viewstate MAC failed.的解决方法
- Prototype源码浅析 Number部分
- JS中不为人知的五种声明Number的方式简要概述
- Some tips of wmi scripting in jscript (1)
- ERROR 1222 (21000): The used SELECT statements have a different number of columns
- javascript parseInt与Number函数的区别
- PHP number_format() 函数定义和用法
- 各种概念POJO、JAVABEAN、DAO、DTO、PO、VO、BO、SSH、EJB
- identifier of an instance of com.edu.zidonghua.po.TbUser was altered from 2 to null
- number 待做截取处理的数值
- HP Z800 Workstation - Configuring RAID devices (HP Z800 做磁盘Raid1,Raid0的阵列)
- The art of software testing翻译--第一章
- Check out the top five articles of 2006
- Security functions of common Active Directory tools
- 变量$REPLY是'read'命令结果保存的默认变量
- Overview of Siebel Application Integration
- SQL DATEADD函数
- 多表连接ibatis
- Get the SID of an Active Directory User