简介:
你和人决斗
决斗规则如下:用一把有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;
}