PKU 2654-Rock-Paper-Scissors Tournament
問題概要
N人の人間でk*n*(n-1)/2回ジャンケンをした.
各人間の勝率を求めよ.
ただしあいこの場合は勝負に含まれず,一度も勝負していない場合は"-"と出力せよ.
解法
実装する.
実装(C++)
#include <cstdio> #include <algorithm> using namespace std; inline int getno(const char *s){ if(s[0]=='r')return 0; if(s[0]=='p')return 1; if(s[0]=='s')return 2; } int main() { int n,k,start=0; for(;~scanf("%d%d",&n,&k);){ if(n==0)break; if(start++)puts(""); int cnt=k*n*(n-1)/2; int p1,p2; char m1[10],m2[10]; int n1,n2; int win[n],lose[n]; fill(win,win+n,0);fill(lose,lose+n,0); for(int i=0;i<cnt;i++){ scanf("%d%s%d%s",&p1,m1,&p2,m2); p1--;p2--; n1=getno(m1);n2=getno(m2); if((n2+1)%3==n1){ win[p1]++;lose[p2]++; } if((n1+1)%3==n2){ win[p2]++;lose[p1]++; } } for(int i=0;i<n;i++){ if(win[i]+lose[i]==0){ puts("-"); }else{ printf("%.3f\n",win[i]/(double)(win[i]+lose[i])); } } } return 0; }