1WaKa_WaKa1

Task_c

Mar 3rd, 2022 (edited)
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.91 KB | None | 0 0
  1. #include <iostream>
  2. #include <map>
  3. #include <vector>
  4. #include <set>
  5.  
  6. using namespace std;
  7. int main() {
  8.     string input;
  9.     string delimiter = "=";
  10.     string leftPart;
  11.     string rightPart;
  12.     map<string, vector<int>> variableMap;
  13.     vector<map<string, int>> changedVariables;
  14.     while (cin >> input) {
  15.         if (input[0] == '{') {
  16.             map<string, int> newPart;
  17.             changedVariables.push_back(newPart);
  18.         } else if (input[0] == '}') {
  19.             for (auto it = changedVariables.back().begin(); it != changedVariables.back().end(); it++) {
  20.                 if (variableMap.find(it->first) != variableMap.end()) {
  21.                     for (int i = 0; i < it->second; i++) {
  22.                         variableMap[it->first].pop_back();
  23.                     }
  24.                 }
  25.             }
  26.             changedVariables.pop_back();
  27.         } else {
  28.             leftPart = input.substr(0, input.find(delimiter));
  29.             rightPart = input.substr(input.find(delimiter)+1, input.length());
  30.             try {
  31.                 int i = stoi(rightPart);
  32.                 if (variableMap.find(leftPart) == variableMap.end()){
  33.                     vector<int> tempVector;
  34.                     tempVector.push_back(i);
  35.                     variableMap.insert(make_pair(leftPart, tempVector));
  36.                     if (!changedVariables.empty()) {
  37.                         if (changedVariables.back().find(leftPart) != changedVariables.back().end()){
  38.                             changedVariables.back()[leftPart] +=1;
  39.                         }else changedVariables.back().insert(make_pair(leftPart, 1));
  40.                     }
  41.                 } else {
  42.                     if (!changedVariables.empty()) {
  43.                         if (changedVariables.back().find(leftPart) != changedVariables.back().end()){
  44.                             changedVariables.back()[leftPart] +=1;
  45.                         }else changedVariables.back().insert(make_pair(leftPart, 1));
  46.                     }
  47.                     variableMap[leftPart].push_back(i);
  48.                 }
  49.             } catch (invalid_argument const& exception){
  50.                 if (!changedVariables.empty()) {
  51.                     if (changedVariables.back().find(leftPart) != changedVariables.back().end()){
  52.                         changedVariables.back()[leftPart] +=1;
  53.                     }else changedVariables.back().insert(make_pair(leftPart, 1));
  54.                 }
  55.                 if (variableMap.find(rightPart) != variableMap.end()) {
  56.                     variableMap[leftPart].push_back(variableMap[rightPart].back());
  57.                     cout << variableMap[leftPart].back() << endl;
  58.                 }else if (variableMap.find(leftPart) != variableMap.end()){
  59.                     variableMap[leftPart].push_back(0);
  60.                     cout << 0 << endl;
  61.                 } else cout << 0 << endl;
  62.             }
  63.         }
  64.     }
  65.     return 0;
  66. }
  67.  
Add Comment
Please, Sign In to add comment