Advertisement
Guest User

Untitled

a guest
Dec 7th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.28 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. long long get_num(string s, int i, int j) {
  6.   long long num = 0;
  7.   bool neg = false;
  8.   if (s[0] == '-') {
  9.     neg = true;
  10.     i++;
  11.   }
  12.   while (i <= j) {
  13.     num = num*10 + (s[i] - '0');
  14.     i++;
  15.   }
  16.   if (neg) return -num;
  17.   return num;
  18. }
  19.  
  20. int last_num(string s) {
  21.   return s.length() - 1;
  22. }
  23.  
  24. void print_vec(vector<int>& vec) {
  25.   for (int i = 0; i < vec.size(); i++) {
  26.     cout << vec[i] << " ";
  27.   }
  28.   cout << endl;
  29. }
  30.  
  31. pair<long long, int> solve(vector<long long>& arr, int start, queue<long long>& inputs) {
  32.   // long long ans = 0;
  33.   for (int i = start; i < arr.size(); i++) {
  34.     string inst = to_string(arr[i]);
  35.     int l = inst.length() - 1;
  36.     if (inst[l] == '1') {
  37.       int first, second;
  38.       if (inst == "1101") {
  39.         first = arr[i+1];
  40.         second = arr[i+2];
  41.       } else if (inst == "1001") {
  42.         first = arr[arr[i+1]];
  43.         second = arr[i+2];
  44.       } else if(inst == "101") {
  45.         first = arr[i+1];
  46.         second = arr[arr[i+2]];
  47.       } else {
  48.         first = arr[arr[i+1]];
  49.         second = arr[arr[i+2]];
  50.         //cout << "none matching: " << inst << endl;
  51.       }
  52.       //cout << "first: " << inst << " " << first << " " << second << endl;
  53.       arr[arr[i+3]] = first + second;
  54.     } else if (inst[l] == '2') {
  55.       int first, second;
  56.       if (inst == "1102") {
  57.         first = arr[i+1];
  58.         second = arr[i+2];
  59.       } else if (inst == "1002") {
  60.         first = arr[arr[i+1]];
  61.         second = arr[i+2];
  62.       } else if (inst == "102") {
  63.         first = arr[i+1];
  64.         second = arr[arr[i+2]];
  65.       } else {
  66.         first = arr[arr[i+1]];
  67.         second = arr[arr[i+2]];
  68.         //cout << "none matching: " << inst << endl;
  69.       }
  70.       //cout << "inside 2: " << inst << first << " " << second << endl;
  71.       arr[arr[i+3]] = first*second;
  72.     } else if (inst == "99") {
  73.       break;
  74.     } else if (inst[l] == '4') {
  75.         cout << "bdfgad" << endl;
  76.         cout << i << endl;
  77.         if (inst == "4")
  78.           return {arr[arr[i+1]], i + 2};
  79.         else return {arr[i+1], i + 2};
  80.     } else if (inst[l] == '3') {
  81.       int to_provide = inputs.front();
  82.       cout << "provide: " << to_provide << endl;
  83.       inputs.pop();
  84.       if (inst == "103") arr[i+1] = to_provide;
  85.       else arr[arr[i+1]] = to_provide;
  86.     } else if (inst[l] == '5') {
  87.       int first, second;
  88.       if (inst == "1005") {
  89.         first = arr[arr[i+1]];
  90.         second = arr[i+2];
  91.       } else if (inst == "105") {
  92.         first = arr[i+1];
  93.         second = arr[arr[i+2]];
  94.       } else if (inst == "1105") {
  95.         first = arr[i+1];
  96.         second = arr[i+2];
  97.       } else {
  98.         first = arr[arr[i+1]];
  99.         second = arr[arr[i+2]];
  100.       }
  101.       if (first != 0) {
  102.         //cout << "jumping to: " << second << endl;
  103.         i = second - 1;
  104.         continue;
  105.       }
  106.     } else if (inst[l] == '6') {
  107.       int first, second;
  108.       if (inst == "1006") {
  109.         first = arr[arr[i+1]];
  110.         second = arr[i+2];
  111.       } else if (inst == "106") {
  112.         first = arr[i+1];
  113.         second = arr[arr[i+2]];
  114.       } else if (inst == "1106") {
  115.         first = arr[i+1];
  116.         second = arr[i+2];
  117.       } else {
  118.         first = arr[arr[i+1]];
  119.         second = arr[arr[i+2]];
  120.       }
  121.       if (first == 0) {
  122.         //cout << "jumping to: " << second << endl;
  123.         i = second - 1;
  124.         continue;
  125.       }
  126.     } else if(inst[l] == '7') {
  127.       int first, second;
  128.       if (inst == "1007") {
  129.         first = arr[arr[i+1]];
  130.         second = arr[i+2];
  131.       } else if (inst == "107") {
  132.         first = arr[i+1];
  133.         second = arr[arr[i+2]];
  134.       } else if (inst == "1107") {
  135.         first = arr[i+1];
  136.         second = arr[i+2];
  137.       } else {
  138.         first = arr[arr[i+1]];
  139.         second = arr[arr[i+2]];
  140.       }
  141.       if (first < second) {
  142.         arr[arr[i+3]] = 1;
  143.       } else arr[arr[i+3]] = 0;
  144.     } else if(inst[l] == '8') {
  145.       int first, second;
  146.       if (inst == "1008") {
  147.         first = arr[arr[i+1]];
  148.         second = arr[i+2];
  149.       } else if (inst == "108") {
  150.         first = arr[i+1];
  151.         second = arr[arr[i+2]];
  152.       } else if (inst == "1108") {
  153.         first = arr[i+1];
  154.         second = arr[i+2];
  155.       } else {
  156.         first = arr[arr[i+1]];
  157.         second = arr[arr[i+2]];
  158.       }
  159.  
  160.       if (first == second) {
  161.         arr[arr[i+3]] = 1;
  162.       } else arr[arr[i+3]] = 0;
  163.     } else {
  164.       cout << "bad" << endl;
  165.       cout << i << endl;
  166.       cout << inst << endl;
  167.       break;
  168.     }
  169.     if (inst[l] == '4' || inst[l] == '3') i++;
  170.     else if (inst[l] == '5' || inst[l] == '6') i = i + 2;
  171.     else i = i + 3;
  172.   }
  173.  
  174.   //cout << arr[0] << endl;
  175.   return {-1, -1};
  176.  
  177. }
  178.  
  179.  
  180. int main() {
  181.   freopen("in.txt", "r", stdin);
  182.   string s;
  183.   cin >> s;
  184.   cout << get_num("-672", 0, 3) << endl;
  185.   vector<long long> arr;
  186.   int last = 0;
  187.   for (int i = 0; i < s.length(); i++) {
  188.     if (s[i] == ',') {
  189.       // arr.push_back(get_num(s, last, i - 1));
  190.       string to_parse = s.substr(last, i - last);
  191.       arr.push_back(get_num(to_parse, 0, last_num(to_parse)));
  192.       last = i + 1;
  193.     }
  194.   }
  195.   arr.push_back(get_num(s, last, s.length() - 1));
  196.   for (int i = 0; i < arr.size(); i++) {
  197.     cout << arr[i] << " ";
  198.   }
  199.   cout << endl;
  200.   cout << "size: " << arr.size() << endl;
  201.   /*for (int i = 0; i < arr.size(); i++) {
  202.     string inst = to_string(arr[i]);
  203.     int l = inst.length() - 1;
  204.     if (inst[l] == '1') {
  205.     int first, second;
  206.     if (inst == "1101") {
  207.     first = arr[i+1];
  208.     second = arr[i+2];
  209.     } else if (inst == "1001") {
  210.     first = arr[arr[i+1]];
  211.     second = arr[i+2];
  212.     } else if(inst == "101") {
  213.     first = arr[i+1];
  214.     second = arr[arr[i+2]];
  215.     } else {
  216.     first = arr[arr[i+1]];
  217.     second = arr[arr[i+2]];
  218.     cout << "none matching: " << inst << endl;
  219.     }
  220.     cout << "first: " << inst << " " << first << " " << second << endl;
  221.     arr[arr[i+3]] = first + second;
  222.     } else if (inst[l] == '2') {
  223.     int first, second;
  224.     if (inst == "1102") {
  225.     first = arr[i+1];
  226.     second = arr[i+2];
  227.     } else if (inst == "1002") {
  228.     first = arr[arr[i+1]];
  229.     second = arr[i+2];
  230.     } else if (inst == "102") {
  231.     first = arr[i+1];
  232.     second = arr[arr[i+2]];
  233.     } else {
  234.     first = arr[arr[i+1]];
  235.     second = arr[arr[i+2]];
  236.     cout << "none matching: " << inst << endl;
  237.     }
  238.     cout << "inside 2: " << inst << first << " " << second << endl;
  239.     arr[arr[i+3]] = first*second;
  240.     } else if (inst == "99") {
  241.     break;
  242.     } else if (inst[l] == '4') {
  243.     if (inst == "4" && arr[arr[i + 1]] == 0) {
  244.     cout << "test passed!!!!!!!!!!!!!!!!!" << endl;
  245.     } else if (inst == "104" && arr[i+1] == 0) {
  246.     cout << "test passed!!!!!!!!!!!!!!!!!" << endl;
  247.     } else {
  248.     cout << "bdfgad" << endl;
  249.     cout << i << endl;
  250.     if (inst == "4")
  251.     cout << arr[arr[i + 1]] << endl;
  252.     else cout << arr[i+1] << endl;
  253.     }
  254.     } else if (inst[l] == '3') {
  255.     if (inst == "103") arr[i+1] = 5;
  256.     else arr[arr[i+1]] = 5;
  257.     } else if (inst[l] == '5') {
  258.     int first, second;
  259.     if (inst == "1005") {
  260.     first = arr[arr[i+1]];
  261.     second = arr[i+2];
  262.     } else if (inst == "105") {
  263.     first = arr[i+1];
  264.     second = arr[arr[i+2]];
  265.     } else if (inst == "1105") {
  266.     first = arr[i+1];
  267.     second = arr[i+2];
  268.     } else {
  269.     first = arr[arr[i+1]];
  270.     second = arr[arr[i+2]];
  271.     }
  272.   if (first != 0) {
  273.     cout << "jumping to: " << second << endl;
  274.     i = second - 1;
  275.     continue;
  276.   }
  277. } else if (inst[l] == '6') {
  278.   int first, second;
  279.   if (inst == "1006") {
  280.     first = arr[arr[i+1]];
  281.     second = arr[i+2];
  282.   } else if (inst == "106") {
  283.     first = arr[i+1];
  284.     second = arr[arr[i+2]];
  285.   } else if (inst == "1106") {
  286.     first = arr[i+1];
  287.     second = arr[i+2];
  288.   } else {
  289.     first = arr[arr[i+1]];
  290.     second = arr[arr[i+2]];
  291.   }
  292.   if (first == 0) {
  293.     cout << "jumping to: " << second << endl;
  294.     i = second - 1;
  295.     continue;
  296.   }
  297. } else if(inst[l] == '7') {
  298.   int first, second;
  299.   if (inst == "1007") {
  300.     first = arr[arr[i+1]];
  301.     second = arr[i+2];
  302.   } else if (inst == "107") {
  303.     first = arr[i+1];
  304.     second = arr[arr[i+2]];
  305.   } else if (inst == "1107") {
  306.     first = arr[i+1];
  307.     second = arr[i+2];
  308.   } else {
  309.     first = arr[arr[i+1]];
  310.     second = arr[arr[i+2]];
  311.   }
  312.   if (first < second) {
  313.     arr[arr[i+3]] = 1;
  314.   } else arr[arr[i+3]] = 0;
  315. } else if(inst[l] == '8') {
  316.   int first, second;
  317.   if (inst == "1008") {
  318.     first = arr[arr[i+1]];
  319.     second = arr[i+2];
  320.   } else if (inst == "108") {
  321.     first = arr[i+1];
  322.     second = arr[arr[i+2]];
  323.   } else if (inst == "1108") {
  324.     first = arr[i+1];
  325.     second = arr[i+2];
  326.   } else {
  327.     first = arr[arr[i+1]];
  328.     second = arr[arr[i+2]];
  329.   }
  330.  
  331.   if (first == second) {
  332.     arr[arr[i+3]] = 1;
  333.   } else arr[arr[i+3]] = 0;
  334. } else {
  335.   cout << "bad" << endl;
  336.   cout << i << endl;
  337.   cout << inst << endl;
  338.   break;
  339. }
  340. if (inst[l] == '4' || inst[l] == '3') i++;
  341. else if (inst[l] == '5' || inst[l] == '6') i = i + 2;
  342. else i = i + 3;
  343. }
  344.  
  345. cout << arr[0] << endl;
  346. */
  347. int perm[] = {5,6,7,8,9};
  348. long long maxm = LLONG_MIN;
  349. vector<pair<vector<long long>, int>> curr_arr(5);
  350. vector<queue<long long>> inputs(5);
  351. //for (int i = 0; i < 5; i++) curr[i] = arr;
  352. int num_perms = 0;
  353. do {
  354.   num_perms++;
  355.   for (int i = 0; i < 5; i++) {
  356.     curr_arr[i].first = arr;
  357.     curr_arr[i].second = 0;
  358.     inputs[i] = queue<long long>();
  359.     inputs[i].push(perm[i]);
  360.   }
  361.   pair<long long, int> prev = {0, 0};
  362.   bool b = true;
  363.   long long curr_max = LLONG_MIN;
  364.   int num = 0;
  365.   int iter = 0;
  366.   inputs[0].push(0LL);
  367.   for (int i = 0; i < 5 && num < 5; i++) {
  368.     prev = solve(curr_arr[i].first, curr_arr[i].second, inputs[i]);
  369.     inputs[(i + 1) % 5].push(prev.first);
  370.     curr_arr[i].second = prev.second;
  371.     if (prev.first == -1) break;
  372.     // cout << "hi :" << prev.first << endl;
  373.     //for (int i = 0; i < 5; i++) cout << perm[i] << " ";
  374.     //cout << endl;
  375.     if (i == 4) {
  376.       i = -1;
  377.       curr_max = max(prev.first, curr_max);
  378.     }
  379.     iter++;
  380.   }
  381.   maxm = max(maxm, curr_max);
  382. } while (next_permutation(perm, perm + 5));
  383. for (int i = 0; i < arr.size(); i++) {
  384.   cout << arr[i] << " ";
  385. }
  386. cout << endl;
  387. cout << "maximum is: " << maxm << " num perms: " << num_perms <<  endl;
  388. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement