题意:
每场比赛有n个玩家共进行k次比赛,你需要计算每个队员获胜的平均概率。
输入包含多个测试实例,第一行n,k,接下k行是每次的出拳
输出每个队员的平均概率,若获胜概率不确定,输出‘-’
输入:
2 4
1 rock 2 paper
1 scissors 2 paper
1 rock 2 rock
2 rock 1 scissors
输出:
0.333
0.667
解题思路:
枚举每个人的W,L
AC代码:
#include<bits/stdc++.h>
using namespace std;
int n=0,k=0,cases=0;
typedef struct pe
{
int w;
int l;
pe()
{
w=0;
l=0;
}
} pe,*pelink;
pe peos[100+5];
int duel(char c1,char c2){
int val=c1-c2;
switch((int)fabs(val))
{
case 0:
return(0);
case 3:
return(val);
default:
return(-val);
}
}
int main()
{
while(scanf("%d",&n)!=EOF&&n>0){
cases++;
memset(peos,0,sizeof(peos));
scanf("%d",&k);
for(int i=1;i<=k;i++)
{
char cs1[10],cs2[10];
int num1,num2;
scanf("%d%s%d%s",&num1,cs1,&num2,cs2);
int flag=duel(cs1[0],cs2[0]);
if(flag>0)
{
peos[num1].w++;
peos[num2].l++;
}
else if(flag<0)
{
peos[num1].l++;
peos[num2].w++;
}
}
if(cases>1)
printf("\n");
for(int i=1;i<=n;i++)
{
if(peos[i].w+peos[i].l==0)
printf("-\n");
else
{
printf("%.3lf\n",(double)peos[i].w/(peos[i].w+peos[i].l));
}
}
}
return 0;
}