Run Time: 0.000
Ranking (as of 2016-03-09): 4 out of 56
Language: C++
/* UVa 1219 - Team Arrangement To build using Visual Studio 2012: cl -EHsc -O2 UVa_1219_Team_Arrangement.cpp */ #include <iostream> #include <string> #include <sstream> #include <algorithm> using namespace std; const int nr_players = 22, nr_chars_max = 31; struct player { int nr_; char name_[nr_chars_max + 1]; char role_; int record_; } players[nr_players]; int nr_Gs, nr_Ds, nr_Ms, nr_Ss, nr_team_Ds, nr_team_Ms, nr_team_Ss; int Gs[nr_players], Ds[nr_players], Ms[nr_players], Ss[nr_players]; bool read_players() { string s; nr_Gs = nr_Ds = nr_Ms = nr_Ss = 0; for (int i = 0; i < nr_players; i++) { getline(cin, s); istringstream iss(s); player& p = players[i]; iss >> p.nr_; if (!p.nr_) return false; iss >> p.name_ >> p.role_; switch (p.role_) { case 'G': Gs[nr_Gs++] = i; break; case 'D': Ds[nr_Ds++] = i; break; case 'M': Ms[nr_Ms++] = i; break; case 'S': Ss[nr_Ss++] = i; break; } int year1, year2; char c; p.record_ = 0; while (iss >> year1 >> c >> year2) p.record_ += year2 - year1 + 1; #ifdef DEBUG cout << p.nr_ << ' ' << p.name_ << ' ' << p.role_ << ' ' << p.record_ << endl; #endif } getline(cin, s); istringstream iss(s); char c; iss >> nr_team_Ds >> c >> nr_team_Ms >> c >> nr_team_Ss; return true; } bool compare_player(int i, int j) { return players[i].nr_ < players[j].nr_; } void print_player(int i) { const player& p = players[i]; cout << p.nr_ << ' ' << p.name_ << ' ' << p.role_ << endl; } int main() { while (read_players()) { if (!nr_Gs || nr_Ds < nr_team_Ds || nr_Ms < nr_team_Ms || nr_Ss < nr_team_Ss) { cout << "IMPOSSIBLE TO ARRANGE\n\n"; continue; } sort(Gs, Gs + nr_Gs, compare_player); sort(Ds, Ds + nr_Ds, compare_player); sort(Ms, Ms + nr_Ms, compare_player); sort(Ss, Ss + nr_Ss, compare_player); int captain = Gs[0]; int nr = players[captain].nr_, record = players[captain].record_; for (int i = 0; i < nr_team_Ds; i++) { int j = Ds[i]; const player& p = players[j]; if (p.record_ > record || p.record_ == record && p.nr_ > nr) { captain = j; nr = p.nr_, record = p.record_; } } for (int i = 0; i < nr_team_Ms; i++) { int j = Ms[i]; const player& p = players[j]; if (p.record_ > record || p.record_ == record && p.nr_ > nr) { captain = j; nr = p.nr_, record = p.record_; } } for (int i = 0; i < nr_team_Ss; i++) { int j = Ss[i]; const player& p = players[j]; if (p.record_ > record || p.record_ == record && p.nr_ > nr) { captain = j; nr = p.nr_, record = p.record_; } } print_player(captain); if (Gs[0] != captain) print_player(Gs[0]); for (int i = 0; i < nr_team_Ds; i++) if (Ds[i] != captain) print_player(Ds[i]); for (int i = 0; i < nr_team_Ms; i++) if (Ms[i] != captain) print_player(Ms[i]); for (int i = 0; i < nr_team_Ss; i++) if (Ss[i] != captain) print_player(Ss[i]); cout << endl; } return 0; }
No comments:
Post a Comment