viernes, 18 de noviembre de 2011

10903 - Rock-Paper-Scissors Tournament, uva

#include<iostream>
#include<iostream>
#include<cstdio>
#include<sstream>
#include<algorithm>
#include<cmath>
#include<vector>
#include<numeric>
#include<cstring>
#define db(a) cout << #a << " = " << a << endl
#define db2(a, b) cout << #a << " = " << a << " " << #b << " = " << b << endl
using namespace std;
struct player {
 int win, lose;
 player(int win = 0, int lose = 0) : win(win), lose(lose) {}
};
int main() {
 int p1, p2, n, k;
 string m1, m2;
 char linea[100];
 stringstream ss;
 bool first = true;
 while (scanf("%d %d\n",&n , &k) == 2){
  if (n == 0) break;
  if (!first) 
   printf("\n");
  else first = false;
  player jugadores[n];
  int times = k * n * (n - 1) / 2;
  for (; times-- ; ) {
   gets(linea);
   ss.clear();
   ss << linea;
   ss >> p1 >> m1 >> p2 >> m2;
   if ( m1[0] == 'r') {
    if (m2[0] == 's')
     jugadores[p1 - 1].win++, jugadores[p2 - 1].lose++;
    else
     if (m2[0] == 'p') jugadores[p1 - 1].lose++, jugadores[p2 - 1].win++;
    continue;
   }
   if ( m1[0] == 's') {
    if (m2[0] == 'p')
     jugadores[p1 - 1].win++, jugadores[p2 - 1].lose++;
    else
     if (m2[0] == 'r') jugadores[p1 - 1].lose++, jugadores[p2 - 1].win++;
    continue;
   }
   if ( m1[0] == 'p') {
    if (m2[0] == 'r')
     jugadores[p1 - 1].win++, jugadores[p2 - 1].lose++;
    else
     if (m2[0] == 's') jugadores[p1 - 1].lose++, jugadores[p2 - 1].win++;
    continue;
   }
  }
  for (int i = 0;i < n; i++) {
   if (jugadores[i].win + jugadores[i].lose == 0)
    puts("-");
   else
    printf("%.3f\n", (double)jugadores[i].win / (jugadores[i].win + jugadores[i].lose));
  }
 }
 return 0;
}

No hay comentarios:

Publicar un comentario