UVa1636 Headshot 【迁移自洛谷博客】
说明:小蒟蒻hkk现在正在做一些概率的题目,由于这方面和数学还有点关系,所以需要一些数学的思维,也需要表述出来,如夏军所述“把自己给讲懂”,所以写了些blog,主要为帮助自己理解。
题目大意
你和人决斗。决斗规则如下:用一把有n个弹槽的左轮手枪,对着自己脑袋来一枪,孰生孰死看天意。现在对方已经装了若干发子弹,并随机转了一下转轮,子弹呢用一个01序列表示,0表示这个弹槽无子弹,1表示有子弹。对方先对着自个脑袋开了一枪,嗯,你只听到了一声’click’,人还好好的,是空枪。现在轮到你了,摆在你面前的有两个选择,一是直接对自己开射,二是转一下转轮再来开射,显然你会选择生还希望更大的那种。
现在要做的就是根据子弹装填的序列,进行判断,如果直接shot生还希望大输出”SHOOT”,如果转一下生还希望大输出”ROTATE”,两种选择生还希望相同输出“EQUAL”.
##理解题意
一个手枪槽应该是这样的样子
这样的一个手枪槽,现在,三角形指向的位置为即将发射的子弹的位置,在发射之前,可以转一下手枪槽,但是并不知道能转到什么位置。现在对方已经发射了一个空枪,然后槽转了一格,但是不知道那一个是否为空,现在要判断是转一下以后开枪还是直接开枪没有子弹的概率大。
##思路
假设我们没有转手枪,那么我们如果想要让下一刻子弹为空,说明我们必须是在连续的两个空弹上。所以我们假设有a个空弹,b个连续的空弹,n为总弹槽数,事件A为该弹为空,B为下一个子弹为空,则
\(P(B|A)=\frac{P(AB)}{P(B)}=\frac{\frac{b}{n}}{\frac{a}{n}}=\frac{b}{a}\)
还有一种情况为我们转了一下,那么,这个就比较简单了,对于发射空弹这个事件,有$$P(A)=\frac$$
那么,我们最终就只需要比较$P(B|A)$与$P(A)\(即可。也就是比较\)\frac\(与\)\frac$的大小。这里说一下,根据不等式的性质,由于a,b,n都是非负整数,所以我们把式子去一下分母,不等号方向也不用变,就变成比较$bn$与$a^2$的大小,就不需要进行浮点数运算了。
##代码
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int maxn=100+7;
int n,cnt1,cnt2,cnt3;
int x,y;
char s[maxn];
void Init(){
cnt1=cnt2=cnt3=0;
scanf("%s",s+1);
if(feof(stdin))exit(0);//读到文件末结束
n=strlen(s+1);
s[n+1]=s[1];//由于是环形,这样做比较方便
}
void Work(){
for(register int i=1;i<=n;++i){
if(s[i]=='0'&&s[i+1]=='0')++cnt1,++cnt2;
else if(s[i]=='0'&&s[i+1]=='1')++cnt2;
if(s[i]=='0')++cnt3;
}
// cnt1:连续2个0的个数,cnt2:0的个数,cnt3和cnt2等价,cnt3是我一时发疯开的
x=cnt1*n;y=cnt3*cnt2;//交叉相乘
if(x==y)printf("EQUAL\n");
else if(x<y)printf("ROTATE\n");
else printf("SHOOT\n");
}
int main(){
while(!feof(stdin)){
Init();
Work();
}
return 0;
}
——发布时间:2017-12-13 13:25:13
UVa1636 Headshot 【迁移自洛谷博客】的更多相关文章
- UVA10779 Collectors Problem 【迁移自洛谷博客】
这是一道不错的练最大流建模的基础题. 这种题目审题是关键. Bob's friends will only exchange stickers with Bob, and they will give ...
- Uva10491 Cows and Cars 【迁移自洛谷博客】
题目大意 假设有a头牛,b辆车(门的总数为a+b),你先选一个门,然后你最终选择前主持人会替你打开C扇有牛的门(不会打开你已经选择的门),问你要不要换门,输出"总是换门"的策略下, ...
- JSOI2018冬令营游记&总结(迁移自洛谷博客)
游记 一开始在冬令营还没开始的时候,十分期待,殊不知每天都有一场浩劫在等着我. Day0 10:50出发,看见lbn同学发了一条说说,也随便发了一个. 然后在车上一直在睡觉,现在感觉挺后悔的,其实可以 ...
- 【洛谷 P4934】 礼物 (位运算+DP)
题目链接 位运算+\(DP\)=状压\(DP\)?(雾 \(a\&b>=min(a,b)\)在集合的意义上就是\(a\subseteq b\) 所以对每个数的子集向子集连一条边,然后答案 ...
- 洛谷 P3958 奶酪
谨以此题来纪念我爆炸的NOIp2017 这个题虽然很多人说是并查集,但是搜索也是毫无压力的,考场搜索细节写挂,爆了个不上不下的80分.今天无意看到这道题,终于AC 首先这道题要考虑一下精度问题,虽然出 ...
- 洛谷 P1019 单词接龙 (DFS)
题目传送门 当时一看到这题,蒟蒻的我还以为是DP,结果发现标签是搜索-- 这道题的难点在于思路和预处理,真正的搜索实现起来并不难.我们可以用一个贪心的思路,开一个dic数组记录每个单词的最小重复部分, ...
- 洛谷 P1126 机器人搬重物 (BFS)
题目链接:https://www.luogu.org/problemnew/show/P1126 吐槽:这题很阴险 一开始没把格子图转化成点图:30分 转化成点图,发现样例过不去,原来每步要判断vis ...
- 题解 洛谷 P2010 【回文日期】
By:Soroak 洛谷博客 知识点:模拟+暴力枚举 思路:题目中有提到闰年然后很多人就认为,闰年是需要判断的其实,含有2月29号的回文串,前四位是一个闰年那么我们就可以直接进行暴力枚举 一些小细节: ...
- 洛谷p2370yyy2015c01的U盘题解
没什么特殊的想法 就是看自己很久没有更新关于题解类的文章了而已 (其实这是我好久之前做的, 只是把它从洛谷博客搬到了这里而已) 题目 首先分析题目要二分 他长成这个亚子太二分了 所以就要二分 最好是先 ...
随机推荐
- ajax传递对象到MVC控制器
1.view层中ajax写法: function Add2() { var model = new Object(); model.UserName = $('#UserName').val(); m ...
- php strlen()函数 语法
php strlen()函数 语法 作用:返回字符串的长度.大理石平台价格 语法:strlen(string) 参数: 参数 描述 string 必需.规定要检查的字符串. 说明:返回字符串的 ...
- <自动化测试>之<自动获取手机短信验证码>
第一次写博,最近解决了做自动化测试短信验证码自动获取填入的方法减少了脚本的人工干预,并非拦截短信,所以不存在安全警报提醒,拿出来分享给大家,有感兴趣的大家可以加Q1856100 目前在职测试开发,,写 ...
- 用ASP实现文件下载
<% '**************************************************************'**使用方法: ...
- Sultana后记:纯css也能写col,select,datepicker,carousel...
未完待续 背景 如今css3越来越发达,focus-within等属性也已经开始在Chrome得到支持.如果有出色的css功底,一点点ps技能,你也能用css3配合原生html标签写出优秀的框架.通过 ...
- oracle sql查询表外键关系
SELECT F.TABLE_NAME, F.CONSTRAINT_NAME, F.COLUMN_NAME, F.POSITION, P.TABLE_NAME, P.COLUMN_NAME, P.PO ...
- noi.ac #227 random
分析 我们发现实际只要计算a[i]>b[j]和a[i]<b[j]哪种多即可 代码 #include<bits/stdc++.h> using namespace std; ], ...
- loj#2333 「JOI 2017 Final」准高速电车
分析 我们发现到达一个点一定是先快车再准快车再慢车 于是快车将1-n分为多个区间 每次取出每个区间当前能到达的点的数量 选剩余时间贡献最大的的一个取得贡献并且再能到达的最远点建立准快车 代码 #inc ...
- C++ 测量程序执行时间的办法
#include <time.h> clock_t start = clock(); //时间起始 /*待测试代码*/ clock_t end = clock(); //时间测试结束 co ...
- 设计模式 - 建造者模式 Builder Pattern
简介 场景 在创建复杂对象时,用户无须关心该对象所包含的属性以及它们的组装方式,只需要指定复杂对象的类型和内容就可以构建它们. 模式定义 建造者模式:将一个复杂对象的构建与表示分离,使得同样的构建过程 ...