题目大意
你有一把手枪,顶针在随机的位置,打一枪,没有子弹,问再打一枪是打出子弹几率大(输出SHOOT),还是转一下再打几率大(输出ROTATE),若概率一样,输出EQUAL。
分析
可将手枪看做唤环形序列,对其分析,设出现0的概率为a,出现两个0的概率为b,则两个概率为a/b和b/n(n为序列长),然后变化为比较a*n和b*b几率大小,若前者的输出SHOOT,否则输出ROTATE,若相等输出EQUAL,时间为0ms。
#include<bits/stdc++.h>
using namespace std;
int main(){
char al[101];
long long a,b,c,n;
memset(al,0,sizeof(al));
while(scanf("%s",&al)!=EOF){
a=strlen(al);
b=c=0;
for(int i=1;i<=a;i++)
if(al[i-1]=='0'){
c++;
if(al[i%a]=='0')
b++;
}
if(b*a>c*c){
cout<<"SHOOT"<<endl;
continue;
}
if(a*b==c*c){
cout<<"EQUAL"<<endl;
continue;
}
cout<<"ROTATE"<<endl;
memset(al,0,sizeof(al));
}
return 0;
}