lightoj 1064 - Throwing Dice

2024-01-29 12:58
文章标签 1064 throwing lightoj dice

本文主要是介绍lightoj 1064 - Throwing Dice,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

n common cubic dice are thrown. What is the probability that the sum of all thrown dice is at least x?

Input

Input starts with an integer T (≤ 200), denoting the number of test cases.

Each test case contains two integers n (1 ≤ n < 25) and x (0 ≤ x < 150). The meanings of n and x are given in the problem statement.

Output

For each case, output the case number and the probability in 'p/q' form where p and q are relatively prime. If q equals 1 then print p only.

Sample Input

Output for Sample Input

7

3 9

1 7

24 24

15 76

24 143

23 81

7 38

Case 1: 20/27

Case 2: 0

Case 3: 1

Case 4: 11703055/78364164096

Case 5: 25/4738381338321616896

Case 6: 1/2

Case 7: 55/46656


这题的大意是给你n个骰子,问你掷出不小于x的概率是多少。
因为所有点数的个数是6^n,所以只用求出不小于x的种数有多少个就可以了。
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 1e9
#define LL long long
using namespace std;LL dp[30][160];
LL gcd(LL a,LL b)
{if(b == 0)return a;elsereturn gcd(b,a%b);
}int main(void)
{int T,n,x,i,j,k;scanf("%d",&T);int cas = 1;while(T--){scanf("%d%d",&n,&x);memset(dp,0,sizeof(dp));dp[0][0] = 1;LL sum = 1;for(i=1;i<=n;i++){sum *= 6;for(j=1;j<=i*6;j++){for(k=1;k<=6;k++){if(j < k)break;dp[i][j] += dp[i-1][j-k];}}}LL ans = 0;for(i=x;i<=n*6;i++)ans += dp[n][i];printf("Case %d: ",cas++);if(ans == 0){printf("0\n");continue;}if(ans == sum){printf("1\n");continue;}LL t = gcd(ans,sum);printf("%lld/%lld\n",ans/t,sum/t);}
}



这篇关于lightoj 1064 - Throwing Dice的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/656978

相关文章

mysql SQL 错误 [1064] [42000]:

一,问题描述: 针对2个一样的sql(肉眼可见一样), 一个执行成功(手动输入sql), 一个执行失败(其他地方复制过来sql)。 SELECT * FROM storage;SELECT * FROM storage; 错误提示: 二,解决步骤: 网上针对此错误的说明 于是我把2个sql拷贝到Notepad++软件 匹配结果为1,所以猜测大概是空白符有问题,建议重新

LightOJ 1068 Investigation (数位dp)

http://www.lightoj.com/volume_showproblem.php?problem=1068 求出区间[A,B]内能被K整除且各位数字之和也能被K整除的数的个数。(1 ≤ A ≤ B < 231 and 0 < K < 10000) 算是最简单的数位dp了,k在这里是10000,三维数组都开不开。但是想想会发现A,B最多有10位,各位数字之和不会超过90,那么当

Mysql(mariaDB) SQL错误(1064):You have an error in your SQLsybtax; check the manual that corresponds to

向MariaDB insert 记录报错1064 INSERT INTO user_mail('userid','username') VALUES('ADMIN','ADMIN'); 解决方案: 修改栏位名称的引号(’’) INSERT INTO user_mail(`userid`,`username`) VALUES('ADMIN','ADMIN');

lightoj 1050 - Marbles (概率DP)

思路:定义dp[i][j] 为 袋子中有i个红球和j个红球时获胜的概率 那么根据题意我只可以任意拿而对手只拿蓝球。那么 dp[i][j] = (拿到红球的概率) * dp[i-1][j-1] + (拿到蓝球的概率) * dp[i][j-2]; 边界:当红球没有时,获胜的概率为1 注意点:T比较大,需要把所有数据预处理出来直接查询,否则超时 /*********************

lightoj 1047 Neighbor House(Dp)

思路:定义dp[i][j] 为粉刷第i个房子用的颜色j dp[i][j] = min(dp[i-1][(j+1)%3] , dp[i-1][(j+2) % 3]); 一共有三种颜色{0, 1, 2},任取一种颜色{j},那么和颜色j不同的颜色就为{(j + 1) % 3 , (j + 2) % 3}; /******************************************

lightoj 1044 Palindrome Partitioning(dp)

题意:给定字符串S,问可以划分的最小回文串数量 思路:定义dp[i]为以i开头的字符串中回文串的最小划分数. dp[i] = min(dp[j] + 1 | i <= j < n && S[i...j]是回文串) 边界,dp[i] = n-i+1. /************************************************ Author: fisty* Crea

lightoj 1037 - Agent 47 (状压DP)

题意:你现在需要消灭n个敌人,n个敌人的血量已知,你的普通攻击力为1,但是如果你杀死敌人i可以用它的武器去杀死其他敌人,p[i][j] 表示用敌人i的武器射杀敌人j会减p[i][j]滴血.问你最少可以攻击多少次可以将敌人杀死。 思路: 定义集合s为死亡敌人的集合。 dp[s] 为让集合为s的人死亡最小需要的攻击次数。 如果现在想要消灭敌人i 并且敌人i不属于s 那么dp[s | (1<<

lightoj 1032 - Fast Bit Calculations (数位DP)

记忆花搜索:dp[len][num][last] : 现在处理第len位,前面有num个11,并且最后一位为last。 /************************************************ Author: fisty* Created Time: 2015-08-18 20:18:09* File Name : 1032.cpp***************

[LightOJ 1292] Laser Shot (几何,判断共线)

LightOJ - 1292 刚开始写的时候是O( n3log(n) n^3log(n))的,枚举两个点,得到一条直线,用set记录下来,然后再 O( n n)地计数,居然没有卡过 orz 听了学长的教导,get到一个几何常用思路,正确解法如下 枚举一个点,再枚举其他点,计算到这个点的斜率,make_pair(dx,dy)塞到map里,把相同斜率的计数一下 这样时间复杂度为 O(n2log

[LightOJ 1364] Expected Cards (高维期望DP)

LightOJ - 1364 一副扑克牌,不断地从中抽牌 要求四种花色都至少要有给定的张数 其中如果抽到了王牌,可以将其变为任意花色 求满足条件时,抽出的期望张数 刚开始想错了,两张王牌并非在一开始就给定了 而是在游戏中可以视当前情况选择着变的 这两种方式是不一样的 由于牌数其实并不会很多, 复杂度乘一乘发现才 107 10^7级别的,所以直接暴力DP 将两张王牌当