UVa1636
来源:互联网 发布:各种网络流行用语 编辑:程序博客网 时间:2024/05/21 14:05
题目链接
简介:
你和人决斗
决斗规则如下:用一把有n个弹槽的左轮手枪,对着自己脑袋来一枪,孰生孰死看天意。现在对方已经装了若干发子弹,并随机转了一下转轮,子弹呢用一个01序列表示,0表示这个弹槽无子弹,1表示有子弹。对方先对着自个脑袋开了一枪,嗯,你只听到了一声’click’,人还好好的,是空枪。现在轮到你了,摆在你面前的有两个选择,一是直接对自己开射,二是转一下转轮再来开射,显然你会选择生还希望更大的那种。
现在要做的就是根据子弹装填的序列,进行判断,如果直接shot生还希望大输出”SHOOT”,如果转一下生还希望大输出”ROTATE”,两种选择生还希望相同输出“EQUAL”
分析:
第一枪没有子弹的概率是一个条件概率
直接在抠一枪相当于是一个00序列,随机转一下再抠相当于是恰好遇到0,
前者的是一个条件概率:一开始是空枪,也就是说起始状态一定是0,
因此概率等于00的个数除以00+01的个数(实际上00+01就是0的个数)
后者是0的比率
设00序列的个数是a**(注意子弹是环形的,首尾连续)**,0的个数是b,串的长度是n,
那么两个概率分别是a/b,b/n
为了避免精度问题,比较a*n和b*b的大小即可
//这里写代码片#include<cstdio>#include<cstring>using namespace std;int main(){ char s[105]; while (scanf("%s",&s)!=EOF) { int n=strlen(s); int a=0,b=0; for (int i=0;i<n;i++) { if (s[i]=='0') b++; if (i>0&&s[i]=='0'&&s[i-1]=='0') a++; } if (s[0]=='0'&&s[n-1]=='0') a++; if (a*n>b*b) printf("SHOOT\n"); else if (a*n<b*b) printf("ROTATE\n"); else printf("EQUAL\n"); } return 0;}
阅读全文
0 0
- UVa1636
- uva1636 决斗
- uva1636 Headshot
- uva1636概率
- [UVA1636] Headshot && 概率
- UVa1636 - Headshot(离散概率)
- uva1636(离散概率)
- uva1636(离散概率)
- 例题10-9 决斗 UVa1636
- 例10-9 uva1636简单概率问题
- 紫书 例题 10-9 决斗 Uva1636
- 【条件概率】Headshot, ACM/ICPC NEERC 2009, UVa1636
- 动态规划M
- Python 格式缩进
- mysql 数据查询23种方案
- 数据类型和运算符(三)
- mysql中GROUP_CONCAT()函数的含义及用法
- UVa1636
- 计算机网络1-3章测试 习题与答案
- C#高级参数out的使用
- 《程序员健康指南》读书笔记
- PerceptIn 张哲:SLAM刚刚开始的未来之风起狮城|ICRA 2017
- A Quick Introduction to Neural Networks
- STM32发布十周年了,意法半导体在MCU领域还有更大野心
- 再次引领行业趋势,vivo隐形指纹黑科技曝光
- 重新在CSDN写博客