Tuesday, March 3, 2015

UVa 11348 - Exhibition

Accepted date: 2015-03-03
Ranking (as of 2015-03-03): 157 out of 326
Language: C++

/*
  UVa 11348 - Exhibition

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

#include <vector>
#include <map>
#include <set>
#include <cstdio>
using namespace std;

int main()
{
  int K;
  scanf("%d", &K);
  for (int k = 1; k <= K; k++) {
    int N;
    scanf("%d", &N);
    map< int, set<int> > stamps;
      // key is  the type of stamp, value is the indices of friends who own the stamp
    for (int i = 0; i < N; i++) {
      int M;
      scanf("%d", &M);
      while (M--) {
        int A;
        scanf("%d", &A);
        pair<map< int, set<int> >::iterator, bool>
          result = stamps.insert(make_pair(A, set<int>()));
        result.first->second.insert(i);
      }
    }
    int ctr = 0;
    vector<int> unique_stamp_ctrs(N, 0);
    for (map< int, set<int> >::const_iterator i = stamps.begin(), e = stamps.end();
      i != e; ++i)
      if (i->second.size() == 1) {
        ctr++;
        unique_stamp_ctrs[*i->second.begin()]++;
      }
    printf("Case %d:", k);
    if (ctr)
      for (size_t i = 0; i < N; i++)
        printf(" %.6lf%%", (static_cast<double>(unique_stamp_ctrs[i]) * 100.0) /
          static_cast<double>(ctr));
    putchar('\n');
  }
  return 0;
}

No comments:

Post a Comment