Ranking (as of 2013-10-13): 194 out of 724
Language: C++
/* UVa 11239 - Open Source To build using Visual Studio 2012: cl -EHsc -O2 UVa_11239_Open_Source.cpp */ #include <iostream> #include <string> #include <vector> #include <map> #include <algorithm> #include <cctype> using namespace std; struct project { string name_; int nr_students_; project() : nr_students_(0) {} project(const string& name) : name_(name), nr_students_(0) {} bool operator<(const project& p) const { if (nr_students_ > p.nr_students_) return true; else if (nr_students_ < p.nr_students_) return false; else return name_ < p.name_; } }; int main() { bool continued = false; string s; while (true) { vector<project> projects; map<string, int> students; int pi; while (true) { if (!continued) getline(cin, s); else continued = false; if (s[0] == '1') break; if (isupper(s[0])) { pi = static_cast<int>(projects.size()); projects.push_back(project(s)); } else { pair< map<string, int>::iterator, bool > result = students.insert(make_pair(s, pi)); if (result.second) projects[pi].nr_students_++; else if (result.first->second != pi) { if (result.first->second != -1) { projects[result.first->second].nr_students_--; result.first->second = -1; } } } } sort(projects.begin(), projects.end()); for (vector<project>::const_iterator i = projects.begin(), e = projects.end(); i != e; ++i) cout << i->name_ << ' ' << i->nr_students_ << endl; getline(cin, s); if (s[0] == '0') break; continued = true; } return 0; }
No comments:
Post a Comment