Advertisement
_takumi

Имена_и_фамилии_2.1

Aug 25th, 2019
417
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.96 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. class Person {
  5. private:
  6.     map<int, string> fn;
  7.     map<int, string> sn;
  8.     string FirstName(const int &year) {
  9.         string first_name = " with unknown first name";
  10.         for (const pair<int, string> &p : fn) {
  11.             if (p.first <= year)
  12.                 first_name = p.second;
  13.             else
  14.                 break;
  15.         }
  16.         return first_name;
  17.     }
  18.     string LastName(const int &year) {
  19.             string last_name = "with unknown last name";
  20.             for (const pair<int, string> &p : sn) {
  21.                 if (p.first <= year)
  22.                     last_name = p.second;
  23.                 else
  24.                     break;
  25.             }
  26.             return last_name;
  27.         }
  28. public:
  29.     void ChangeFirstName(const int &year, const string &first_name) {
  30.         fn[year] = first_name;
  31.     }
  32.     void ChangeLastName(const int &year, const string &last_name) {
  33.         sn[year] = last_name;
  34.     }
  35.     string GetFullName(const int &year) {
  36.         if (FirstName(year) == " with unknown first name" && LastName(year) == "with unknown last name")
  37.             return "Incognito";
  38.         if (FirstName(year) == " with unknown first name")
  39.             return LastName(year) + FirstName(year);
  40.         return FirstName(year) + ' ' + LastName(year);
  41.     }
  42.     string GetFullNameWithHistory(const int &year) {
  43.         string s = GetFullName(year);
  44.         if (s == "Incognito")
  45.             return "Incognito";
  46.         if (FirstName(year) == " with unknown first name") {
  47.             if (begin(sn) == sn.find(year))
  48.                 return LastName(year) + " with unknown first name";
  49.             vector<string> v;
  50.             for (const pair<int, string> &p : sn) {
  51.                 if (p.first <= year)
  52.                     v.push_back(p.second);
  53.                 else
  54.                     break;
  55.             }
  56.             reverse(begin(v), end(v));
  57.             unique(begin(v), end(v));
  58.             s = v[0] + " (" + v[1];
  59.             for (int i = 2; i < v.size(); i++) {
  60.                 s += ", " + v[i];
  61.             }
  62.             s += ") with unknown first name";
  63.             return s;
  64.         }
  65.         if (LastName(year) == "with unknown last name") {
  66.             if (begin(fn) == fn.find(year))
  67.                 return FirstName(year) + " with unknown last name";
  68.             vector<string> v;
  69.             for (const pair<int, string> &p : fn) {
  70.                 if (p.first <= year)
  71.                     v.push_back(p.second);
  72.                 else
  73.                     break;
  74.             }
  75.             reverse(begin(v), end(v));
  76.             unique(begin(v), end(v));
  77.             s = v[0] + " (" + v[1];
  78.             for (int i = 2; i < v.size(); i++) {
  79.                 s += ", " + v[i];
  80.             }
  81.             s += ") with unknown last name";
  82.             return s;
  83.         }
  84.     }
  85. };
  86.  
  87. int main() {
  88.   Person person;
  89.   person.ChangeLastName(1960, "Strkova");
  90.   person.ChangeLastName(1961, "Strokova");
  91.   person.ChangeLastName(1962, "Strkov");
  92.   person.ChangeLastName(1963, "Strkov");
  93.   person.ChangeLastName(1964, "Strko");
  94.   person.ChangeLastName(1965, "Strk");
  95.   //person.ChangeFirstName(1966, "Polina");
  96.   person.ChangeLastName(1968, "Sergeeva");
  97.  
  98.   /*
  99.   person.ChangeFirstName(1965, "Polina");
  100.   person.ChangeFirstName(1966, "Polina");
  101.   person.ChangeFirstName(1967, "Polina");
  102.   person.ChangeFirstName(1968, "Polina");
  103.   person.ChangeFirstName(1969, "Polin");
  104.   person.ChangeFirstName(1970, "Poli");
  105.   person.ChangeFirstName(1971, "Pol");*/
  106.   cout << person.GetFullNameWithHistory(1990);
  107.  
  108.   return 0;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement