Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- class Person {
- private:
- map<int, string> fn;
- map<int, string> sn;
- string FirstName(const int &year) {
- string first_name = " with unknown first name";
- for (const pair<int, string> &p : fn) {
- if (p.first <= year)
- first_name = p.second;
- else
- break;
- }
- return first_name;
- }
- string LastName(const int &year) {
- string last_name = "with unknown last name";
- for (const pair<int, string> &p : sn) {
- if (p.first <= year)
- last_name = p.second;
- else
- break;
- }
- return last_name;
- }
- public:
- void ChangeFirstName(const int &year, const string &first_name) {
- fn[year] = first_name;
- }
- void ChangeLastName(const int &year, const string &last_name) {
- sn[year] = last_name;
- }
- string GetFullName(const int &year) {
- if (FirstName(year) == " with unknown first name" && LastName(year) == "with unknown last name")
- return "Incognito";
- if (FirstName(year) == " with unknown first name")
- return LastName(year) + FirstName(year);
- return FirstName(year) + ' ' + LastName(year);
- }
- string GetFullNameWithHistory(const int &year) {
- string s = GetFullName(year);
- if (s == "Incognito")
- return "Incognito";
- if (FirstName(year) == " with unknown first name") {
- if (begin(sn) == sn.find(year))
- return LastName(year) + " with unknown first name";
- vector<string> v;
- for (const pair<int, string> &p : sn) {
- if (p.first <= year)
- v.push_back(p.second);
- else
- break;
- }
- reverse(begin(v), end(v));
- unique(begin(v), end(v));
- s = v[0] + " (" + v[1];
- for (int i = 2; i < v.size(); i++) {
- s += ", " + v[i];
- }
- s += ") with unknown first name";
- return s;
- }
- if (LastName(year) == "with unknown last name") {
- if (begin(fn) == fn.find(year))
- return FirstName(year) + " with unknown last name";
- vector<string> v;
- for (const pair<int, string> &p : fn) {
- if (p.first <= year)
- v.push_back(p.second);
- else
- break;
- }
- reverse(begin(v), end(v));
- unique(begin(v), end(v));
- s = v[0] + " (" + v[1];
- for (int i = 2; i < v.size(); i++) {
- s += ", " + v[i];
- }
- s += ") with unknown last name";
- return s;
- }
- }
- };
- int main() {
- Person person;
- person.ChangeLastName(1960, "Strkova");
- person.ChangeLastName(1961, "Strokova");
- person.ChangeLastName(1962, "Strkov");
- person.ChangeLastName(1963, "Strkov");
- person.ChangeLastName(1964, "Strko");
- person.ChangeLastName(1965, "Strk");
- //person.ChangeFirstName(1966, "Polina");
- person.ChangeLastName(1968, "Sergeeva");
- /*
- person.ChangeFirstName(1965, "Polina");
- person.ChangeFirstName(1966, "Polina");
- person.ChangeFirstName(1967, "Polina");
- person.ChangeFirstName(1968, "Polina");
- person.ChangeFirstName(1969, "Polin");
- person.ChangeFirstName(1970, "Poli");
- person.ChangeFirstName(1971, "Pol");*/
- cout << person.GetFullNameWithHistory(1990);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement