#include #include #include #include #include #include #include using namespace std; struct prob { bool got; //init int time; int numPens; }; class par { public: vector probs; int numGot; int totalTime; int parNum; }; bool operator < (const par & l, const par & r) { if (l.numGot < r.numGot) return true; else return l.totalTime < r.totalTime; } void main() { ifstream infile("prizes.in"); int sets; int i, j, k; int p, t, jud; char m; int numProb, numSub, numPar; vector pars; vector bucket; infile >> sets; for (int set = 0; set < sets; set++) { infile >> numProb >> numSub >> numPar; pars.clear(); pars.resize(numPar); for (int i = 0; i < pars.size(); i++) { pars[i].probs.clear(); pars[i].probs.resize(numProb); pars[i].numGot = 0; pars[i].totalTime = 0; pars[i].parNum = i+1; for (vector::iterator jt = pars[i].probs.begin(); jt != pars[i].probs.end(); jt++) { jt->got = false; jt->time = 0; jt->numPens = 0; } } for (i = 0; i < numSub; i++) { infile >> p >> m >> t >> jud; int prob = (int)(m - 'A'); p--; if (pars[p].probs[prob].got) { continue; } if (jud) { pars[p].numGot++; pars[p].probs[prob].got = true; pars[p].probs[prob].time = t + pars[p].probs[prob].numPens * 20; pars[p].totalTime += pars[p].probs[prob].time; } else { pars[p].probs[prob].numPens++; } } cout << "Data set " << set+1 << ":\n"; for (i = numProb; i >= 0; i--) { bucket.clear(); for (j = 0; j < numPar; j++) { if (pars[j].numGot == i) { bucket.push_back(pars[j]); } } sort(bucket.begin(), bucket.end()); for (j = 0; j < bucket.size(); j++) { cout << bucket[j].parNum << " " << bucket[j].numGot << " " << bucket[j].totalTime << endl; } } if (set < sets-1) { cout << endl; } } }