Saturday, February 27, 2016

UVa 570 - Stats

Accepted date: 2016-02-27
Run Time: 0.000
Ranking (as of 2016-02-27): 52 out of 228
Language: C++

/*
  UVa 570 - Stats

  To build using Visual Studio 2012:
    cl -EHsc -O2 UVa_570_Stats.cpp
*/

#include <cstdio>
#include <cstring>

const int nr_player_digits = 5;

struct stat {
  int g_; // number of games played
  int h_, k_, e_, b_, d_;
} stats[nr_player_digits + 1][nr_player_digits + 1];

int main()
{
  int n, p, g = 0;
  double h, k, e, b, d;
  char key[2];
  while (scanf("%s", key) != EOF) {
    switch (key[0]) {
    case 'C':
      scanf("%d", &n);
      while (n--) {
        scanf("%d", &p);
        stats[p / 10][p % 10].g_++;
      }
      g++;
      break;
    case 'H':
      scanf("%d", &p);
      stats[p / 10][p % 10].h_++;
      break;
    case 'K':
      scanf("%d", &p);
      stats[p / 10][p % 10].k_++;
      break;
    case 'E':
      scanf("%d", &p);
      stats[p / 10][p % 10].e_++;
      break;
    case 'B':
      scanf("%d", &p);
      stats[p / 10][p % 10].b_++;
      break;
    case 'D':
      scanf("%d", &p);
      stats[p / 10][p % 10].d_++;
      break;
    case 'R':
      puts("Player  Hit Pct    KPG      BPG      DPG");
      puts("-----------------------------------------");
      h = k = e = b = d = 0;
      for (int i = 0; i <= nr_player_digits; i++)
        for (int j = 0; j <= nr_player_digits; j++)
          if (stats[i][j].g_) {
            const stat& s = stats[i][j];
            printf("%02d      %+5.3lf  %7.3lf  %7.3lf  %7.3lf\n",
              i * 10 + j,
              ((s.k_ || s.e_ || s.h_) ?
                (static_cast<double>(s.k_) - s.e_) /
                  (static_cast<double>(s.k_) + s.e_ + s.h_) : 0.0),
              static_cast<double>(s.k_) / s.g_,
              static_cast<double>(s.b_) / s.g_,
              static_cast<double>(s.d_) / s.g_
            );
            h += s.h_, k += s.k_, e += s.e_, b += s.b_, d += s.d_;
          }
      printf("team    %+5.3lf  %7.3lf  %7.3lf  %7.3lf\n\n",
        (k - e) / (k + e + h), k / g, b / g, d / g);
      g = 0;
      memset(stats, 0, sizeof(stats));
      break;
    }
  }
  return 0;
}

No comments:

Post a Comment