POJ 2654

题意:n个人两两玩剪刀石头布的游戏,每个人玩k次,求最后每个人的胜利次数/(胜利次数+失败次数)

题解:细心一点就没什么问题了。

View Code
 1 #include<cstdio>

 2 #include<cstring>

 3 #include<algorithm>

 4 using namespace std;

 5 int win[105],lose[105];

 6 int comp(char s1[],char s2[])

 7 {

 8     switch(s1[0])

 9     {

10     case 'r':

11         switch(s2[0])

12         {

13         case 'r':

14             return 0;

15         case 'p':

16             return -1;

17         case 's':

18             return 1;

19         }

20         break;

21     case 'p':

22         switch(s2[0])

23         {

24         case 'r':

25             return 1;

26         case 'p':

27             return 0;

28         case 's':

29             return -1;

30         }

31         break;

32     case 's':

33         switch(s2[0])

34         {

35         case 'r':

36             return -1;

37         case 'p':

38             return 1;

39         case 's':

40             return 0;

41         }

42     }

43 }

44 int main()

45 {

46     int n,k;

47     bool first=true;

48     while(scanf("%d%d",&n,&k)!=EOF,n)

49     {

50         memset(win,0,sizeof(win));

51         memset(lose,0,sizeof(lose));

52         if(first)

53             first=false;

54         else

55             printf("\n");

56         int all=k*n*(n-1)/2;

57         for(int i=0; i<all; i++)

58         {

59             int a,b,c;

60             char s1[10],s2[10];

61             scanf("%d%s%d%s",&a,s1,&b,s2);

62             c=comp(s1,s2);

63             if(c==1)

64                 win[a]++,lose[b]++;

65             else if(c==-1)

66                 win[b]++,lose[a]++;

67         }

68         for(int i=1;i<=n;i++)

69         {

70             if(win[i]+lose[i]==0)

71                 printf("-\n");

72             else

73                 printf("%.3lf\n",(double)(win[i])/(double)(win[i]+lose[i]));

74         }

75     }

76     return 0;

77 }

你可能感兴趣的:(poj)