lunes, 24 de octubre de 2011

10258 - Contest Scoreboard, uva

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define foreach(it, l) for (typeof(l.begin()) it = l.begin(); it != l.end(); it++)
#define db(a) cout << #a << " = " << a << endl;
#define db2(a, b) cout << #a << " = " << a << " " << #b << " = " << b << endl;
using namespace std;
struct team {
	int id, solved[11], penalty[11];
	bool submit;
	friend bool operator<(const team& a, const team& b) {
		if(a.solved[10] > b.solved[10]) return true;
		if(a.solved[10] == b.solved[10] && a.penalty[10] < b.penalty[10]) return true;
		if(a.solved[10] == b.solved[10] && a.penalty[10] == b.penalty[10] && a.id < b.id) return true;
		return false;
	}
};
team equipos[101];
void reset() {
		for (int i = 0; i < 101; i++) {
			equipos[i].id = i;
			memset(equipos[i].solved, 0, sizeof equipos[i].solved);
			memset(equipos[i].penalty, 0, sizeof equipos[i].penalty);
			equipos[i].submit = false;
		}
}
void calcular(void) {
	for (int i = 1; i < 101; i++) {
		if(!equipos[i].submit) continue;
		for (int x = 1; x < 10; x++) {
			{
				if(equipos[i].solved[x]) {
					equipos[i].solved[10] ++;
					equipos[i].penalty[10] += equipos[i].penalty[x];
				}
			}
		}
	}
}
int main() {
	int test, contestant, problem, time;
	char l;
	bool first = true;
	string linea;
	getline(cin, linea);
	test = atoi(linea.c_str());
	getline(cin, linea);
	while (test--) {
		reset();
		while (getline(cin, linea) && linea.size()) {
			sscanf(linea.c_str(), "%d %d %d %c", &contestant, &problem, &time, &l);
			equipos[contestant].submit = true;
			if(equipos[contestant].solved[problem]) continue;
			if(l == 'C' || l == 'I') {
				if (l == 'C') {
					equipos[contestant].solved[problem] = 1;
					equipos[contestant].penalty[problem] += time;
				}
				else 
					equipos[contestant].penalty[problem] += 20;
			}
		}
		calcular();
		if(!first) printf("\n");
		first = false;
		sort(equipos, equipos + 101);
		for (int i = 0; i < 101; i++) {
			if(equipos[i].submit)
				printf("%d %d %d\n", equipos[i].id, equipos[i].solved[10], equipos[i].penalty[10]);
		}
	}
	return 0;
}

No hay comentarios:

Publicar un comentario