Advertisement
Guest User

Untitled

a guest
Dec 19th, 2014
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.99 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4. #include <unordered_map>
  5. #include <string>
  6. #include <set>
  7. using namespace std;
  8.  
  9. void ordena_parella(pair<string,string>& p){
  10.         if(p.first > p.second) swap(p.first,p.second);
  11. }
  12.  
  13. void desordena_parella(pair<string,string>& p){
  14.         if(p.first < p.second) swap(p.first,p.second);
  15. }
  16.  
  17. int main () {
  18.    
  19.     /* inicialitzacions*/
  20.     pair<string,string> entrada; // Casos: 1-> Només 1 dels dos està ja a parelles
  21.     map <string,string> parelles; // 2-> Els 2 es torben a parelles (però a parelles diferents només)
  22.     unordered_map <string,string> parellesalreves;
  23.     set <string> solters;
  24.     string comanda;
  25.    
  26.    
  27.     while(cin >> comanda) {
  28.         if(comanda == "affair") {
  29.             cin >> entrada.first >> entrada.second;
  30.             ordena_parella(entrada);
  31.             unordered_map<string,string>::iterator it2;
  32.            
  33.             /* PRIMER QUE ENTRA */
  34.             map<string,string>::iterator it = parelles.find(entrada.first);
  35.             if(it != parelles.end()) { // Si hem trobat el nom de la parella a 1a pos
  36.                 solters.insert(it->second); // Afegim com a solter a l'altre
  37.                 it2 = parellesalreves.find(it->second);
  38.                 parellesalreves.erase(it2);
  39.                 parelles.erase(it);
  40.             }
  41.             else { // Busco a 2a posicio
  42.                 it2 = parellesalreves.find(entrada.first);
  43.                 if(it2 != parellesalreves.end()) {
  44.                     solters.insert(it2->second); // Afegim com a solter a l'altre
  45.                     it = parelles.find(it2->second);
  46.                     parellesalreves.erase(it2);
  47.                     parelles.erase(it);
  48.                 }
  49.             }
  50.             /*--------------------------*/
  51.             /* SEGON QUE ENS ENTREN */
  52.             it = parelles.find(entrada.second);
  53.             if(it != parelles.end()) { // Si hem trobat el nom de la parella a 1a pos
  54.                 solters.insert(it->second); // Afegim com a solter a l'altre
  55.                 it2 = parellesalreves.find(it->second);
  56.                 parellesalreves.erase(it2);
  57.                 parelles.erase(it);
  58.             }
  59.             else {
  60.                 it2 = parellesalreves.find(entrada.second); // On estarà el 2n (si està)
  61.                 if(it2 != parellesalreves.end()) { // Comprovem
  62.                     it = parelles.find(it2->second);
  63.                     parelles.erase(it);
  64.                     solters.insert(it2->second); // L'afegim com a solter al 2n
  65.                     parellesalreves.erase(it2);
  66.                 }
  67.             }
  68.             /* -----------------------*/
  69.            
  70.  
  71.             parelles.insert(entrada);
  72.             desordena_parella(entrada);
  73.             parellesalreves.insert(entrada);
  74.             set<string>::iterator itsolt = solters.find(entrada.first);
  75.             if(itsolt != solters.end()) {
  76.                 solters.erase(itsolt);
  77.             }
  78.             set<string>::iterator itsolt2 = solters.find(entrada.second);
  79.             if(itsolt2 != solters.end()) {
  80.                 solters.erase(itsolt2);
  81.             }
  82.         }
  83.         else if(comanda == "info") {
  84.             cout << "COUPLES:" << endl;
  85.             for(map<string,string>::iterator escriu = parelles.begin(); escriu != parelles.end(); ++escriu) {
  86.                 cout << escriu->first << " "<< escriu->second << endl;
  87.             }
  88.             cout << "ALONE:" << endl;
  89.             for(set<string>::iterator escribemelo = solters.begin(); escribemelo != solters.end(); ++escribemelo) {
  90.                 cout << *escribemelo<<  endl;
  91.             }
  92.             cout << "----------" << endl;
  93.         }
  94.     }
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement