UVA1636 决斗 Headshot(条件概率)

题目传送门
这道题的题意其实就是,现在给你一把枪:第一枪为空炮,现在有俩操作

  • 1:直接打一枪(每一次打一枪都会自动移动到下一位)
  • 2:转一下再打一枪(转的位置再任何情况下每一位的概率是相同的)
    请问我想要下一枪打空炮,(也就是让打空炮的概率最大),我应该怎么操作(我是应该选择1还是选择2呢)
    选择转一下再开枪我的打空炮计算概率其实就是: 全 部 为 0 的 位 置 ( 没 有 子 弹 的 位 置 ) 总 位 置 ( 弹 夹 的 所 有 位 置 ) \frac{全部为0的位置(没有子弹的位置)}{总位置(弹夹的所有位置)} 0()
    直接打一枪的概率就是:
    字 串 为 00 的 所 有 可 能 ( 注 意 考 虑 首 尾 , 因 为 是 环 嘛 ) 总 位 置 ( 弹 夹 的 所 有 位 置 ) 所 有 为 0 的 位 置 \frac{字串为00的所有可能(注意考虑首尾,因为是环嘛)}{总位置(弹夹的所有位置)所有为0的位置} 000
    本题可以交叉相乘来避免掉精度的问题
#include<iostream>
#include<cstring>
#include<string>
using namespace std;

string s;
int main(){
	while(cin>>s){
		int a0=0,a00=0,n=s.size();
		if(s[0]=='0')a0++;
		for(int i=1;s[i];i++){
			if(s[i]=='0'&&s[i-1]=='0')a00++;
			if(s[i]=='0')a0++;
			//else if(s[i]=='1'&&s[i-1]=='0')a01++;
		}
		if(s[n-1]=='0'&&s[0]=='0')a00++;
	//	cout<<a0*a0<<" "<<a00*n<<endl;
		s.clear();
		if(a0*a0>a00*n){
			cout<<"ROTATE"<<endl;
		}else if(a0*a0==a00*n){
			cout<<"EQUAL"<<endl;
		}else cout<<"SHOOT"<<endl;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值