Advertisement
savrasov

3

Oct 17th, 2017
353
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.55 KB | None | 0 0
  1. //#include "stdafx.h"
  2.  
  3.  
  4. #include <algorithm>
  5. #include <iostream>
  6. #include <string>
  7. #include <cstring>
  8. #include <fstream>
  9. #include <cmath>
  10. #include <vector>
  11. #include <utility>
  12. #include <cstdlib>
  13. #include <deque>
  14. #include <queue>
  15. #include <iomanip>
  16. #include <numeric>
  17. #include <stack>
  18. #include <map>
  19. //#include <unordered_map>
  20. #include <set>
  21. //#include <unordered_set>
  22. #include <cmath>
  23. #include <list>
  24. #define mp make_pair
  25. #define pb push_back
  26. //#define x first
  27. //#define y second
  28. #define pnt pair<ld, ld>
  29. #define preturn(a) return cout << a << endl, 0
  30.  
  31. using namespace std;
  32.  
  33. typedef long long ll;
  34. typedef unsigned long long ull;
  35. typedef long double ld;
  36. typedef unsigned int uint;
  37. const int N = (int)250000, mdt = 1e7, limit = 1e8;
  38. const ld eps = 1e-8, eps1 = 1e-20, PI = 3.14159265358979323846264338, OOO = 1e100L, lim = sqrt(2e9 + 100);
  39. const ll OO = 1e18 * 8, mod = 1e9 + 7, md = 4294967291;
  40.  
  41. map<char, int> a;
  42. string s;
  43.  
  44. void wr()
  45. {
  46.     int r = 5;
  47.     for (; s[r] == ' ' || s[r] == '(' || s[r] == 39; r++);
  48.     string g;
  49.     for (; s[r] != ' ' && s[r] != ')' && s[r] != 39; g += s[r], r++);
  50.     if (g.empty())
  51.     {
  52.         cout << ' ';
  53.         return;
  54.     }
  55.     int e = (g[0] == '-');
  56.     if((g[e] <= '9' && g[e] >= '0') || g[e] == '-')
  57.         cout << g;
  58.     else cout << a[g[e]] * ((e) ? -1 : 1);
  59.     return;
  60. }
  61.  
  62. string mul(string q, string w)
  63. {
  64.     int r = 0, t = 0, p;
  65.     string ans;
  66.     bool b = 0;
  67.     int i = 0;
  68.     for (; q[i] == ' '; i++);
  69.     if (!(q[i] <= '9' && q[i] >= '0'))
  70.         r = a[q[i]];
  71.     else for (int i = 0; i < q.size(); i++)
  72.         if (q[i] != ' ') r = r * 10 + q[i] - '0';
  73.     i = 0;
  74.     for (; w[i] == ' '; i++);
  75.     if (!(w[i] <= '9' && w[i] >= '0'))
  76.         t = a[w[i]];
  77.     else for (int i = 0; i < w.size(); i++)
  78.         if(w[i] != ' ')
  79.             t = t * 10 + w[i] - '0';
  80.     p = r * t;
  81.     b = (p < 0);
  82.     p = abs(p);
  83.     for (; p; ans = (char)(p % 10 + '0') + ans, p /= 10);
  84.     if (ans == "")
  85.         ans = "0";
  86.     if (b)
  87.         ans = '-' + ans;
  88.     return ans;
  89. }
  90.  
  91. string norm(string s)
  92. {
  93.     for (int i = 0; i < s.size(); i++)
  94.         if(s[i] == '*')
  95.     {
  96.         string s1, q, w;
  97.         int l, r;
  98.         for (l = i - 1; s[l] == ' ' || (s[l] <= '9' && s[l] >= '0') || (s[l] >= 'a' && s[l] <= 'z'); q = s[l] + q, l--);
  99.         for (r = i + 1; s[r] == ' ' || (s[r] <= '9' && s[r] >= '0' || (s[r] >= 'a' && s[r] <= 'z')); w += s[r], r++);
  100.         for (int i = 0; i < l + 1; i++)
  101.             s1 += s[i];
  102.         s1 += mul(q, w);
  103.         for (int i = r; i < s.size(); i++)
  104.             s1 += s[i];
  105.         s = s1;
  106.         i = 0;
  107.     }
  108.     return s;
  109. }
  110.  
  111. int solve()
  112. {
  113.     int r = 1;
  114.     bool b = 1;
  115.     for (; s[r] == ':' || s[r] == '=' || s[r] == ' '; r++);
  116.     int res = 0, u;
  117.     char t = '+';
  118.     for(int i = r; s[i] != ';'; i++)
  119.         if (s[i] != ' ')
  120.         {
  121.             if (b && s[i] == '-')
  122.             {
  123.                 if (t == '+')
  124.                     t = '-';
  125.                 else t = '+';
  126.             }
  127.             else if (s[i] == '-' || s[i] == '+')
  128.                 t = s[i], b = 1;
  129.             else if(s[i] <= '9' && s[i] >= '0')
  130.             {
  131.                 u = 0;
  132.                 for (int j = i; s[j] <= '9' && s[j] >= '0'; j++)
  133.                     u = u * 10 + s[j] - '0', i = j;
  134.                 if (t == '-')
  135.                     res -= u;
  136.                 else if (t == '+')
  137.                     res += u;
  138.                 b = 0;
  139.             }
  140.             else
  141.             {
  142.                 if (t == '-')
  143.                     res -= a[s[i]];
  144.                 else
  145.                     res += a[s[i]];
  146.                 b = 0;
  147.             }
  148.         }
  149.     return res;
  150. }
  151.  
  152. string pr(string s)
  153. {
  154.     string s1;
  155.     for (int i = 0; i < s.size(); i++)
  156.         if (s[i] != ' ' || (i > 1 && i < s.size() - 1 && s[i - 1] == 39 && s[i + 1] == 39))
  157.             s1 += s[i];
  158.     return s1;
  159. }
  160.  
  161. int main()
  162. {
  163.     ios_base::sync_with_stdio(0);
  164.     cin.tie();
  165.     cout.tie();
  166.     //cout << (char)(39);
  167.     for (; getline(cin, s);)
  168.     {
  169.         s = pr(s);
  170.         if (s[0] == 'w' && s[1] == 'r')
  171.             wr();
  172.         else
  173.             s = norm(s), a[s[0]] = solve();
  174.     }
  175.     return 0;
  176. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement