http://acm.timus.ru/problem.aspx?space=1&num=1936

F - Roshambo
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u
Submit Status Practice URAL Description
Bootstrap: Wondering how it's played?
Will: It's a game of deception. But your bet includes all the dice, not just your own. What are they wagering?
Bootstrap: Oh, the only thing we have. Years of service.
Will: So any crew member can be challenged?
Bootstrap: Aye. Anyone.
Will: I challenge Davy Jones.
All that the pirates have on the Flying Dutchman is the years of service that are left for them. Every crewman wants to shorten it. That is why gambling is very popular on the ship, the winner have a chance to shorten his years of service significantly.
Pirates often gather to play “Roshambo”, also known as “rock-scissors-paper”. The game consists of several sets. In the beginning of each set players stand in a circle, count to three and show one of three gestures simultaneously, conventionally called as rock, scissors and paper. If everyone shows the same gesture or if each of the three gestures is shown, then nobody leave the game and they play another set. If among the shown gestures there are only two different then only players that chose the victorious gesture play the next set. Scissors beats rock, rock beats paper and paper beats scissors. The game continues until the only one player is left, and that pirate is called the winner. The winner’s time of service is shortened on the number of years that equals the number of the sets played, while the losers get extra years.
Bootstrap Bill decided to try his fortune. You should help him determine the expected value of prize in case of his victory. Pirates don’t know any complicated strategies for this game. So you can suppose that pirates show every gesture equiprobably. Input
The only line contains integer n that is the number of sailors that are going to play, including Bill ( ≤ n ≤ ). Output
Output the expected amount of years that will be taken off from winner. Absolute or relative error should be no more than −. Sample Input
input output 1.5

题目,格式混乱,清点上面链接查看原题

题意就是求N个人剪刀石头布直到剩下最后一个人所用的盘数的期望值。

我以前做过类似的题,叫“闪电劈人概率计算器”,输入三国杀游戏中,从自己开始逆时针的座位依次为己方还是敌方,闪电判定一次劈中的概率,求现在自己放闪电,劈中的人是敌方的概率。这是一道让人算完之后能悟到不要乱放闪电的题,这题已经失传了,因为出这题的服务器再也不开了。那是一个神奇的小机房,想当年我们在那里努力练习补刀……不,各种算法。

但,

这种题其实就是手算出公式然后输进去嘛!

e[i]表示从i个人的状态开始,决出最后一个人所需步数的期望。

e[1]=0,e[i]=(e[i-1]*(1/3)^i*3+1)+(e[i-2]*3*(1/3)^i+1)+...+(e[1]*...)+e[i]*(1-psum),

这题有点不一样,数字实在太大了,它说精确到6位小数,其实后面的数据放松了。只精确到几万,后面全是0,都能过,简直逗。

//我发现那个kn=1.0然后慢慢减,得的答案特别逗,要kn=0,然后慢慢加,才不逗,这是什么原理
#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
using namespace std; long double f[];
long double jc[];
long double cf[]; int main()
{
int i,j;
jc[]=1.0;
for(i=;i<=;i++)
jc[i]=jc[i-]*i;
cf[]=1.0;
for(i=;i<=;i++)
cf[i]=cf[i-]*3.0;
f[]=;
f[]=1.5;
for(i=;i<=;i++)
{
f[i]=;
long double kn=0.0;
for(j=;j<i;j++)
{
long double k=1.0/jc[j]/jc[i-j]/cf[i-]*jc[i];
kn+=k;
f[i]+=k*(1.0+f[j]);
}
f[i]+=1.0-kn;
f[i]/=kn;
//cout<<i<<". "<<f[i]<<" kn="<<kn<<endl;
}
int n;
while(scanf("%d",&n)!=EOF)
printf("%lf\n",(double)f[n]);
return ;
}

URAL 1936 Roshambo 题解的更多相关文章

  1. URAL 1936 Roshambo(求期望)

    Description Bootstrap: Wondering how it's played? Will: It's a game of deception. But your bet inclu ...

  2. Ural 1029 Ministry 题解

    目录 Ural 1029 Ministry 题解 题意 题解 程序 Ural 1029 Ministry 题解 题意 给定一个\(n\times m(1\le n \le10,1\le m \le50 ...

  3. Ural 1298 Knight 题解

    目录 Ural 1298 Knight 题解 题意 题解 程序 Ural 1298 Knight 题解 题意 给定一个\(n\times n(1\le n\le8)\)的国际象棋棋盘和一个骑士(基本上 ...

  4. Ural 1238 Folding 题解

    目录 Ural 1238 Folding 题解 题意 题解 程序 Ural 1238 Folding 题解 题意 定义折叠.展开为: 单个大写英文字母是一个折叠的串,把它展开后是它本身. 如果\(S\ ...

  5. URAL题解三

    URAL题解三 URAL 1045 题目描述:有\(n\)个机场,\(n-1\)条航线,任意两个机场有且只有一种方案联通.现有两个恐怖分子从\(m\)号机场出发,第一个人在机场安装炸弹,乘坐飞机,引爆 ...

  6. URAL题解二

    URAL题解二 URAL 1082 题目描述:输出程序的输入数据,使得程序输出"Beutiful Vasilisa" solution 一开始只看程序的核心部分,发现是求快排的比较 ...

  7. URAL题解一

    URAL题解一 URAL 1002 题目描述:一种记住手机号的方法就是将字母与数字对应,如图.这样就可以只记住一些单词,而不用记住数字.给出一个数字串和n个单词,用最少的单词数来代替数字串,输出对应的 ...

  8. Ural 1248 Sequence Sum 题解

    目录 Ural 1248 Sequence Sum 题解 题意 题解 程序 Ural 1248 Sequence Sum 题解 题意 给定\(n\)个用科学计数法表示的实数\((10^{-100}\s ...

  9. Ural 1201 Which Day Is It? 题解

    目录 Ural 1201 Which Day Is It? 题解 题意 输入 输出 题解 程序 Ural 1201 Which Day Is It? 题解 题意 打印一个月历. 输入 输入日\((1\ ...

随机推荐

  1. 网易免费邮件开启smtp教程

    网易免费邮件开启smtp教程     作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们在部署zabbix邮件报警中可能会用到163.com.那么我们如何去开启smtp服务呢? 1 ...

  2. DB设计原则(一)字段名定义避免二义性。

    字段名定义避免二义性.如:主数据中有库存信息表 KCDDID,KCDDMC.若要在业务表中存储库存地点ID的话,不要定义为KCDD,要定义为KCDDID.这样标明存储的就是ID,而不是名称.同样,单位 ...

  3. cocos2dx 帧动画(iOS)

    植物大战僵尸的植物摇摆效果 //帧动画 Animation *animation = Animation::create(); Sprite *sprite = Sprite::create(&quo ...

  4. MySQL线程池的引入可以提高我们的MySQL的性能

    支持线程池的版本:MySQL 企业版本,MySQL percona的分支 MariDB 的版本.我们知道我们的MySQL 语句是不支持硬解析的,没有无SQL 解析 cache.每个连接对应一个线程,我 ...

  5. Windows 下常见的反调试方法

    稍稍总结一下在Crack或Rervese中比较常见的一些反调试方法,实现起来也比较简单,之后有写的Demo源码参考,没有太大的难度. ①最简单也是最基础的,Windows提供的API接口:IsDebu ...

  6. hiho一下 第207周

    题目1 : The Lastest Time 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 What is latest time you can make with ...

  7. LeetCode算法题-Arranging Coins(Java实现)

    这是悦乐书的第229次更新,第241篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第96题(顺位题号是441).您想要以楼梯形状形成总共n个硬币,其中每个第k行必须具有恰 ...

  8. 2501 矩阵距离 (bfs)

    描述 给定一个N行M列的01矩阵 A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为: dist(A[i][j],A[k][l])=|i-k|+|j-l| 输出一个N行M列的整数矩阵B,其 ...

  9. Spring boot结合mybatis开发的报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

    错误:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found),经过排查确定是没有找到xml的原因 ...

  10. Windows xp/2003 中安装虚拟网卡 Microsoft Loopback Adapter

    方法 1 (命令行下安装)devcon.exe install %windir%\inf\netloop.inf *msloop 类似于以下输出表示安装成功: Device node created. ...