码迷,mamicode.com
首页 > 其他好文 > 详细

[UVa1636]Headshot

时间:2017-10-22 11:12:50      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:数据   浮点   return   子弹   sizeof   就会   put   导致   ==   

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

(数据中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

标签:数据   浮点   return   子弹   sizeof   就会   put   导致   ==   

原文地址:http://www.cnblogs.com/Mrsrz/p/7707737.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!