thouxanbanuno

Imena i familii - 2

Oct 26th, 2020
1,028
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <map>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. class Person {
  7. public:
  8.   void ChangeFirstName(int year, const string& first_name) {
  9.     // добавить факт изменения имени на first_name в год year
  10.             first_name_changes[year] = first_name;
  11.  
  12.   }
  13.   void ChangeLastName(int year, const string& last_name) {
  14.     // добавить факт изменения фамилии на last_name в год year
  15.             last_name_changes[year] = last_name;
  16.  
  17.   }
  18.   string GetFullName(int year) {
  19.        string first_name="", last_name="",ans="";
  20.        for(auto i : first_name_changes ){
  21.             if(i.first>year) break;
  22.             first_name = i.second;
  23.        }
  24.        for(auto i : last_name_changes ){
  25.             if(i.first>year) break;
  26.             last_name = i.second;
  27.        }
  28.        if(first_name!=""){
  29.             if(last_name!=""){
  30.                 ans=first_name;
  31.                 ans+=" ";
  32.                 ans+=last_name;
  33.             }
  34.             else{
  35.                 ans+=first_name;
  36.                 ans+=" with unknown last name";
  37.             }
  38.        }
  39.        else{
  40.             if(last_name!=""){
  41.                 ans=last_name;
  42.                 ans+=" with unknown first name";
  43.             }
  44.             else{
  45.                 ans="Incognito";
  46.             }
  47.        }
  48.        return (ans);
  49.  
  50.   }
  51.   string GetFullNameWithHistory(int year) {
  52.         vector <pair<int,string> > f_history, l_history;
  53.        string first_name="", last_name="",ans="";
  54.        string current_f="", current_l="";
  55.        for(auto i : first_name_changes ){
  56.             if(i.first>year) break;
  57.             first_name = i.second;
  58.             f_history.push_back(i);
  59.        }
  60.        for(auto i : last_name_changes ){
  61.             if(i.first>year) break;
  62.             last_name = i.second;
  63.             l_history.push_back(i);
  64.        }
  65.  
  66.         vector <string> res1, res2;
  67.         for(auto i : f_history){
  68.             if(i.first >year) break;
  69.             if(current_f!= i.second){
  70.                 res1.push_back(i.second);
  71.             }
  72.             current_f=i.second;
  73.         }
  74.         for(auto i : l_history){
  75.             if(i.first>year) break;
  76.             if(current_l!=i.second){
  77.                 res2.push_back(i.second);
  78.             }
  79.             current_l=i.second;
  80.         }
  81.         if(res1.size()){
  82.             if(res2.size()){
  83.                     ans+= res1[res1.size()-1];
  84.                     ans+=' ';
  85.                     res1.pop_back();
  86.                     if(res1.size()){
  87.                         ans+="(";
  88.                         ans+=res1[res1.size()-1];
  89.                         res1.pop_back();
  90.  
  91.                     while(res1.size()){
  92.                         ans+=", ";
  93.                         ans+=res1[res1.size()-1];
  94.                         res1.pop_back();
  95.                     }
  96.                     ans+=") ";
  97.                     }
  98.                     ans+= res2[res2.size()-1];
  99.                     res2.pop_back();
  100.                     if(res2.size()){
  101.                         ans+=" (";
  102.                         ans+=res2[res2.size()-1];
  103.                         res2.pop_back();
  104.                     while(res2.size()){
  105.                         ans+=", ";
  106.                         ans+=res2[res2.size()-1];
  107.                         res2.pop_back();
  108.                     }
  109.                     ans+=")";
  110.                     }
  111.  
  112.             }
  113.             else{
  114.                 ans+= res1[res1.size()-1];
  115.                     ans+=' ';
  116.                     res1.pop_back();
  117.                     if(res1.size()){
  118.                         ans+="(";
  119.                         ans+=res1[res1.size()-1];
  120.                         res1.pop_back();
  121.  
  122.                     while(res1.size()){
  123.                         ans+=", ";
  124.                         ans+=res1[res1.size()-1];
  125.                         res1.pop_back();
  126.                     }
  127.                     ans+=") ";
  128.                     }
  129.                 ans+="with unknown last name";
  130.             }
  131.  
  132.         }
  133.         else{
  134.             if(res2.size()){
  135.             ans+= res2[res2.size()-1];
  136.                     res2.pop_back();
  137.                     if(res2.size()){
  138.                         ans+=" (";
  139.                         ans+=res2[res2.size()-1];
  140.                         res2.pop_back();
  141.                     while(res2.size()){
  142.                         ans+=", ";
  143.                         ans+=res2[res2.size()-1];
  144.                         res2.pop_back();
  145.                     }
  146.                     ans+=")";
  147.                     }
  148.                 ans+=" with unknown first name";
  149.             }
  150.             else{
  151.                 ans+="Incognito";
  152.             }
  153.         }
  154.  
  155.  
  156.        return (ans);
  157.   }
  158. private:
  159.   map <int, string> first_name_changes;
  160.   map <int, string> last_name_changes;
  161. };
  162.  
  163. int main() {
  164.   Person person;
  165.  
  166.   person.ChangeFirstName(1965, "Polina");
  167.   person.ChangeLastName(1967, "Sergeeva");
  168.   for (int year : {1900, 1965, 1990}) {
  169.     cout << person.GetFullNameWithHistory(year) << endl;
  170.   }
  171.  
  172.   person.ChangeFirstName(1970, "Appolinaria");
  173.   for (int year : {1969, 1970}) {
  174.     cout << person.GetFullNameWithHistory(year) << endl;
  175.   }
  176.  
  177.   person.ChangeLastName(1968, "Volkova");
  178.   for (int year : {1969, 1970}) {
  179.     cout << person.GetFullNameWithHistory(year) << endl;
  180.   }
  181.  
  182.   person.ChangeFirstName(1990, "Polina");
  183.   person.ChangeLastName(1990, "Volkova-Sergeeva");
  184.   cout << person.GetFullNameWithHistory(1990) << endl;
  185.  
  186.   person.ChangeFirstName(1966, "Pauline");
  187.   cout << person.GetFullNameWithHistory(1966) << endl;
  188.  
  189.   person.ChangeLastName(1960, "Sergeeva");
  190.   for (int year : {1960, 1967}) {
  191.     cout << person.GetFullNameWithHistory(year) << endl;
  192.   }
  193.  
  194.   person.ChangeLastName(1961, "Ivanova");
  195.   cout << person.GetFullNameWithHistory(1967) << endl;
  196.  
  197.   return 0;
  198. }
  199.  
  200.  
RAW Paste Data