#include<iostream> #include<vector> #include<cstdio> #include<algorithm> #include<map> #include<set> #define db(a) cout << #a << " = " << a << endl; #define db2(a, b) cout << #a << " = " << a << " = " << #b << " = " << b << endl; #define foreach(it, l) for (typeof(l.begin()) it = l.begin(); it != l.end(); it++) using namespace std; struct proyecto { string nombre; int cantidad; proyecto(string nombre1 = "", int cantidad1 = 0) : nombre(nombre1), cantidad(cantidad1) {} }; bool cmp(proyecto a, proyecto b) { if(a.cantidad > b.cantidad) return true; if(a.cantidad < b.cantidad) return false; if(a.nombre < b.nombre) return true; return false; } int main() { string line; map<string, set<string> > mapa; set<string> s; vector<proyecto> res; string capital; while(getline(cin, line)) { if(line == "0") break; if(line[0] == '1') { foreach(it_set, s) { int cont = 0; foreach(it, mapa) if(it->second.count(*it_set)) cont++; if(cont > 1) foreach(it, mapa) if(it->second.count(*it_set)) it->second.erase(it->second.find(*it_set)); } foreach(it, mapa) { res.push_back(proyecto(it->first, it->second.size())); } sort(res.begin(), res.end(), cmp); foreach(it, res) { printf("%s %d\n", it->nombre.c_str(), it->cantidad); } res.clear(); mapa.clear(); s.clear(); continue; } if(line[0] < 'A' || line[0] > 'Z') { mapa[capital].insert(line); s.insert(line); } else mapa[line], capital = line; } return 0; }use STL map and set for a best perfomance of the problem.
miércoles, 28 de septiembre de 2011
11239 - Open Source - UVA
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario