2012年1月13日 星期五

acm 10903 Rock-Paper-Scissors Tournament

[心得] //0.256

1.memset也可以初始化 布林陣列 ,memset define 在 "string.h"裡
2. res[]陣列是用來記錄選手i贏的次數
3.flag[]陣列是,表示這次比賽如果不是平手,=>用來記錄選手i 這次比賽有意義
4, time[] 陣列是用來紀錄選手i到底比賽幾次(但是平手不紀錄)

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
 
int i,j=0,number,time[150],game,p1,p2,res[150];
char m1[10],m2[10];

int main()
{

  while(scanf("%d %d",&number,&game)==2)
  {
                 
     if(number==0)
        break;
     if(j>0)
        printf("\n");
     j++;
    
     bool flag[number+1];
     game= game*number*(number-1)/2;
     memset(res,0,sizeof(res));
     memset(time,0,sizeof(time));
     memset(flag,false,sizeof(flag));
    
     for(i=0;i<game;i++)
     {
    
      scanf("%d %s %d %s",&p1,m1,&p2,m2);
        
       if(m1[0]=='r' && m2[0]=='p') 
           {res[p2]+=1; flag[p1]=flag[p2]=true; time[p1]+=1;time[p2]+=1;}
       else if (m1[0]=='r' && m2[0]=='s')  
           {res[p1]+=1; flag[p1]=flag[p2]=true; time[p1]+=1;time[p2]+=1;} 
       else if (m1[0]=='p' && m2[0]=='r')   
           {res[p1]+=1; flag[p1]=flag[p2]=true; time[p1]+=1;time[p2]+=1;}
       else if (m1[0]=='p' && m2[0]=='s')    
           {res[p2]+=1; flag[p1]=flag[p2]=true; time[p1]+=1;time[p2]+=1;;}
       else if (m1[0]=='s' && m2[0]=='p')    
           {res[p1]++;  flag[p1]=flag[p2]=true; time[p1]+=1;time[p2]+=1;}
       else if (m1[0]=='s' && m2[0]=='r')
           {res[p2]+=1; flag[p1]=flag[p2]=true; time[p1]+=1;time[p2]+=1;}
    
     }
     for(i=1;i<=number;i++)
     {
        if( flag[i] == false)
           printf("-\n");
        else
        {                    
           printf("%.3f\n",(double)res[i]/time[i]);
        }
     } 
  } 

  system("pause");
  return 0;   
}

沒有留言:

張貼留言