[UVa1636]Headshot

Posted Mrsrz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[UVa1636]Headshot相关的知识,希望对你有一定的参考价值。

题目大意:给你一把左轮手枪,随机装上子弹。现在你已经打了一枪,没有子弹,问你是直接再打一枪没有子弹的几率高,还是随机转一下没有子弹的几率高,或者一样高?

(数据中0表示没有子弹,1表示有)

解题思路:简单概率问题。

直接再打一枪没有子弹的几率就是“00”的个数除以“00”和“01”的总个数(第一枪没子弹),而“00”和“01”的总个数就是“0”的个数(有“0”必定有”00“或”01“,除非只有一个)。

而随机转一下没子弹的概率就是”0“的个数除以总个数。

那么设”00“有a个,”0“有b个,总个数为n,则比较$\frac{a}{b}$和$\frac{b}{n}$即可。

这个也可以转化为比较$an$和$b^2$,我认为这样更好,因为b可能为0,此时就会出现除以0导致答案错误的情况,而且这么做没有浮点误差。

然后随便统计一下即可。

C++ Code:

#include<cstdio>
#include<cstring>
char s[11111];
int _00,_0;
int main(){
	while(scanf("%s",s)!=EOF){
		int i,len=strlen(s);
		_00=_0=0;
		if(s[0]==‘0‘)++_0;
		for(i=1;i<len;++i){
			if(s[i]==‘0‘){
				++_0;
				if(s[i-1]==‘0‘)++_00;
			}
		}
		if(s[len-1]==‘0‘&&s[0]==‘0‘)++_00;
		if(_00*len==_0*_0)puts("EQUAL");else
		if(_00*len>_0*_0)puts("SHOOT");else
		puts("ROTATE");
		memset(s,0,sizeof s);
	}
	return 0;
}

 

  

 

以上是关于[UVa1636]Headshot的主要内容,如果未能解决你的问题,请参考以下文章

[UVa1636]Headshot

「UVA1636」Headshot(概率

uva-1636-概率

UVa 1636 决斗

UVA&&POJ离散概率练习[3]

UVa 1354 Mobile Computing[暴力枚举]