UVA - 1636 Headshot(条件概率)
题目链接
紫书上讲的并不是完全正确,考虑到概率论的知识此题很简单:
- 设事件A为第一枪放空,事件B为直接再扣一枪也放空。问题就是在A事件发生的条件下求事件B的概率,那么就是 P ( B ∣ A ) = P ( A B ) P ( A ) P(B|A)= \frac{P(AB)}{P(A)} P(B∣A)=P(A)P(AB),第一枪对应字符串"0",第二枪对应字符串"00"
- 如果是随机转动到一个位置为空枪,那么就是字符为"0"的位置随机选取,相当于在样本容量为字符串长度中随机抽样,显然概率 P = P ( 0 ) n P= \frac{P(0)}{n} P=nP(0)
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <math.h>
#include <cstdio>
#include <string>
#include <bitset>
#include <cstring>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define ins insert
#define lowbit(x) (x&(-x))
#define mkp(x,y) make_pair(x,y)
#define mem(a,x) memset(a,x,sizeof a);
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<int,int> P;
const double eps=1e-8;
const double pi=acos(-1.0);
const int inf=0x3f3f3f3f;
const ll INF=1e18;
const int Mod=1e9+7;
const int maxn=2e5+10;
char s[105];
int main(){
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
while(~scanf("%s",s)){
int a=0,b=0,n=strlen(s);
s[n]=s[0];
s[n+1]='\0';
for(int i=0;i<n;i++){
if(s[i]=='0' && s[i+1]=='0')
a++;
}
for(int i=0;i<n;i++) if(s[i]=='0') b++;
if(a*n>b*b) puts("SHOOT");
else if(a*n<b*b) puts("ROTATE");
else puts("EQUAL");
}
return 0;
}