hdu 4599 Dice】的更多相关文章

题意:给定三个表达式,问你求出最小的m1,m2,满足G(m1) >= F(n), G(m2) >= G(n). 析:这个题是一个概率DP,但是并没有那么简单,运算过程很麻烦. 先分析F(n),这个用DP来推公式,d[i],表示抛 i 次连续的点数还要抛多少次才能完成.那么状态转移方程就是 d[i] = 1/6*(1+d[i+1]) + 5/6*(1+d[1]), 意思就是说在第 i 次抛和上次相同的概率是1/6,然后加上上次抛的和这一次,再加上和上次不同的,并且又得从第1次开始计算. 边界就是…
思路: 1.求f[n];dp[i]表示i个连续相同时的期望 则 dp[0]=1+dp[1]     dp[1]=1+(5dp[1]+dp[2])/6     ……     dp[i]=1+(5dp[1]+dp[i+1])/6     ……     dp[n]=0 可以求得f[n]=(6^n-1)/5. 2.求h[n];dp[i]表示i个连续相同的1时的期望 则 dp[0]=1+(5dp[0]+dp[1])/6     dp[1]=1+(5dp[0]+dp[2])/6     ……     dp[…
数学能力已经彻底降低到了小学水平,真是惨啊惨... 首先G(M)很容易确定,G(M) = 6 * M; H(N) = 6 * F(N),于是推出来H(N)就可以了,昨天请教了一下别人,直接数学公式搞定,不需要什么DP H(N) = 1/6 * (H(N-1) + 1) + 5/6 * (H(N-1) + 1 + H(N)) 解释一下,首先有1/6的概率扔出来1,于是有1/6 * (H(N-1) + 1),后边那部分这么想,先扔了1次,卧槽?居然不一样,那就重新扔,于是有了后面一部分...(某数学…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4652 题意:一个m个面的筛子.两种询问:(1)平均抛多少次后使得最后n次的面完全一样:(2)平均抛多少次后使得最后n次的面完全不同? 思路:设dp[i]表示i次完全相同.不同时还需要抛的次数期望. (1)下面首先讨论完全相同的情况. (2)完全不同的情况: i64 Pow(int n,int m){    i64 ans=1,x=n;    while(m)    {        if(m&1)…
Problem Description There are 2 special dices on the table. On each face of the dice, a distinct number was written. Consider a1.a2,a3,a4,a5,a6 to be numbers written on top face, bottom face, left face, right face, front face and back face of dice A.…
事实上是非常水的一道bfs,用字符串表示每一个状态,map判重就ok了. 题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5012 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<cctype> #include<algorithm> #include<string>…
Problem Description There are 2 special dices on the table. On each face of the dice, a distinct number was written. Consider a1.a2,a3,a4,a5,a6 to be numbers written on top face, bottom face, left face, right face, front face and back face of dice A.…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4652 题意: 给你一个有m个面的骰子. 两种询问: (1)"0 m n": “最后n次点数均相同”的投掷次数期望. (2)"1 m n": “最后n次点数各不相同”的投掷次数期望. 题解: 表示状态: dp[i] = expectation (当前已经有i个点数相同/不相同) 找出答案: ans = dp[0] 如何转移: 一.都相同 (1)dp[i] = dp[i+1…
Dice Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 180    Accepted Submission(s): 121 Special Judge Problem Description You have a dice with m faces, each face contains a distinct number. We…
版权声明:欢迎关注我的博客,本文为博主[炒饭君]原创文章,未经博主同意不得转载 https://blog.csdn.net/a1061747415/article/details/36685493 Dice Problem Description You have a dice with m faces, each face contains a distinct number. We assume when we tossing the dice, each face will occur r…
先推出F(n)的公式: 设dp[i]为已经投出连续i个相同的点数平均还要都多少次才能到达目标状态. 则有递推式dp[i] = 1/6*(1+dp[i+1]) + 5/6*(1+dp[1]).考虑当前这一次掷色子,有1/ 6的概率投的和前面的一样,有5/6的概率不一样,不一样就要重新投,就到了dp[1]的状态,这里投了一次,所以要加1.边界有dp[0] = dp[1]+1,dp[n] = 0; 可以这么说,H[n]应该是6*F[n]的,随便YY一样. 更严谨的话就是一样要去推,递推式如下,设dp[…
思路: dp[i]表示当前在已经投掷出i个不相同/相同这个状态时期望还需要投掷多少次 对于第一种情况有: dp[0] = 1+dp[1] dp[1] = 1+((m-1)*dp[1]+dp[2])/m dp[i] = 1+((m-1)*dp[1]+dp[i+1])/m …… dp[n] = 0 可以得到:dp[n-1]=m*dp[n]+1 所以dp[0]=(m^n-1)/(m-1)也即是第一种的答案! 对于第二种情况有: dp[0]=1+dp[1] dp[1]=1+(dp[1]+(m-1)*dp…
简单DFS //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler #include <stdio.h> #include <iostream> #include <cstring> #include <cmath> #include <stack> #include <queue> #include <vector> #inclu…
嘟嘟嘟 题目大意就是对于一个m面的骰子,回答这么两个问题: 1.求连续扔n次都是同一数字的期望次数. 2.求连续扔n次每一次数字都不相同的期望次数. 对于期望dp特别菜的我来说,这道题已经算是很难了.反正是抠了一天…… 我们先看第一问. 令fi表示连续 i 次数字都相同的期望,那么要考虑他能转化到什么状态,而不是由什么状态转化过来. 转化到什么状态要考虑到所有情况:包括扔的数字相同的和不同两种情况,于是转移方程就写出来了: fi = 1 / m * fi+1 + (m - 1) / m * f1…
专题链接 第一题--poj3744 Scout YYF I  链接 (简单题) 算是递推题 如果直接推的话 会TLE 会发现 在两个长距离陷阱中间 很长一部分都是重复的 我用 a表示到达i-2步的概率 b表示到达i-1步的概率 c表示到达i步的概率 如果数很大的话 中间肯定会有重复的a,b,c 直接将i挪到最近的陷阱前一位 i = a[o]-1,大大节省时间. #include <iostream> #include<cstdio> #include<cstring>…
HDU 5955 Guessing the Dice Roll 2016 ACM/ICPC 亚洲区沈阳站 题意 有\(N\le 10\)个人,每个猜一个长度为\(L \le 10\)的由\(1-6\)构成的序列,保证序列两两不同. 不断地掷骰子,直到后缀与某人的序列匹配,则对应的人获胜. 求每个人获胜的概率. 思路 显然,涉及的序列最多100个,用ac自动机构出这些状态,计算状态之间的转移概率. 记增量矩阵为\(A\)(即终状态不再计算转移到自身的概率),答案为\(b\),初始序列为\(x\),…
hdu 5955 Guessing the Dice Roll [AC自动机+高斯消元] 题意:给出 n≤10 个长为 L≤10 的串,每次丢一个骰子,先出现的串赢,问获胜概率. 题解:裸的AC自动机,求匹配到终止结点的概率,用 高斯消元?一开始不知道怎么建方程组,直接举个例子吧: Input: 1 2 2 1 1 2 1 图解: x0原本概率就是1,然后还要加上其他结点走向它的概率,,这样最后算下来是大于1的,现在还是觉得怪怪的... #include <cstdio> #include &…
A - Play the DiceTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87326#problem/A Description There is a dice with n sides, which are numbered from 1,2,...,n and have the equal possibility to show up…
A - Play the DiceTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87326#problem/A Description There is a dice with n sides, which are numbered from 1,2,...,n and have the equal possibility to show up…
Problem Description There is a dice with n sides, which are numbered from 1,2,...,n and have the equal possibility to show up when one rolls a dice. Each side has an integer ai on it. Now here is a game that you can roll this dice once, if the i-th s…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4586 解题思路: 只考虑第一次,获得的金币的平均值为sum/n.sum为所有色子的面的金币值相加. 对于运气好,摇中了可以再来一次,该轮就能获得m/n*(sum/n) 运气好,又再来一次,该轮能获得(m/n)^2*(sum/n) 无穷无尽的摇下去,一共能获得sum/n*(1+p + p^2+`````+p^k + ````),其中p = m/n 将式子化简,就能得到E = sum/(n-m).所以…
Play the Dice Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 3648    Accepted Submission(s): 1181Special Judge Problem Description There is a dice with n sides, which are numbered from 1,2,...,…
Dice Time Limit:1000MS     Memory Limit:65536KB Description There are 2 special dices on the table. On each face of the dice, a distinct number was written. Consider a 1.a 2,a 3,a 4,a 5,a 6 to be numbers written on top face, bottom face, left face, r…
http://acm.hdu.edu.cn/showproblem.php?pid=5955 题意:给你长度为l的n组数,每个数1-6,每次扔色子,问你每个串第一次被匹配的概率是多少 题解:先建成ac自动机构造fail数组,然后因为fail指针可能向前转移所以不能不能直接递推dp,需要高斯消元解方程,对于节点i,假设不是结束点而且能转移到它的点有a1,a2...an,那么dp[i]=1/6*dp[a1]+1/6*dp[a2]+...+1/6*a[n],然后我们可以列出n个方程,高斯消元然后找到每…
Play the Dice Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 1328    Accepted Submission(s): 429 Special Judge Problem Description There is a dice with n sides, which are numbered from 1,2,...…
题意有 N≤10 个人,每个猜一个长度为L≤10的由1−6构成的序列,保证序列两两不同.不断地掷骰子,直到后缀与某人的序列匹配,则对应的人获胜.求每个人获胜的概率. 思路:建立trie图,跑高斯消元.高斯消元每个点的意义是:第i行第j列的值为x 有概率x从点j转移过来 ; ; ; int ch[MAXNODE][SIGMA_SIZE]; int f[MAXNODE]; int sz; void insert(int* P, int len, int v) { ; ; i < len; i++)…
这道题比赛中没做出来,赛后搞了好久才出来的,严重暴露的我薄弱的数学功底, 这道题要推公式的,,,有类似于1*a+2*a^2+3*a^3+...+n*a^n的数列求和. 最后画了一张纸才把最后的结果推出来.::(x*M^x)/N. 而且通过这道题我发现有些数学函数还不如直接循环来的快, 例如这道题中求x的值的时候. [我在此收回前面的话,昨天是oj的问题,今天我又交了一遍log的代码,耗时变成了0ms了...OMG] 方法一: int x = int(log(n)/log(m)+0.5);    …
思路:设期望值为s,前m个是再来一次机会,则有 s=(a[1]+s)/n+(a[2]+s)/n+……+(a[m]+s)/n+a[m+1]/n…… 化简:(n-m)s=sum 当sum=0时,为0: 当n==m时,为inf: 否则为sum/(n-m). 代码如下: #include<cstdio> #define I(x) scanf("%d",&x) int main() { int n,m,t,sum; while(I(n)!=EOF){ sum=; ;i<…
题意:给你一个n面的骰子每个面有一个值,然后其中有不同值代表你能获得的钱,然后有m个特殊的面,当你骰到这一面的时候可以获得一个新的机会 问你能得到钱的期望. 析: 骰第一次     sum/n 骰第二次     sum/n*(m/n) 骰第三次     sum/n*(m/n)*(m/n) 骰第四次     sum/n*(m/n)*(m/n)*(m/n) ............ 骰第k次     sum/n*(m/n)^k 即    sum/n*(1+q+q^2+q^3+……+q^k)    q…
题面: m 面骰子,求1. 出现n个连续相同的停止 ;2. 出现n个连续不同的停止的期望次数.(n, m ≤ 10^6 ) 解析: 当然要先列式子啦. 用f[i](g[i])表示出现i个连续相同(不相同)的停止的期望次数.(期望=1/概率) 当然可秒看出f[1]=1,f[n]=0; 但我们不能顺推,因我们不能确定f[0]的值.那就逆推吧. 当前事件期望=1/概率×后继事件a+1/概率×后续事件b+1.(注意1代表当前情况能向所有已知方向拓展,而无障碍) f[i]=1/m*f[i+1](加入与前面…