Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- long long get_num(string s, int i, int j) {
- long long num = 0;
- bool neg = false;
- if (s[0] == '-') {
- neg = true;
- i++;
- }
- while (i <= j) {
- num = num*10 + (s[i] - '0');
- i++;
- }
- if (neg) return -num;
- return num;
- }
- int last_num(string s) {
- return s.length() - 1;
- }
- void print_vec(vector<int>& vec) {
- for (int i = 0; i < vec.size(); i++) {
- cout << vec[i] << " ";
- }
- cout << endl;
- }
- pair<long long, int> solve(vector<long long>& arr, int start, queue<long long>& inputs) {
- // long long ans = 0;
- for (int i = start; i < arr.size(); i++) {
- string inst = to_string(arr[i]);
- int l = inst.length() - 1;
- if (inst[l] == '1') {
- int first, second;
- if (inst == "1101") {
- first = arr[i+1];
- second = arr[i+2];
- } else if (inst == "1001") {
- first = arr[arr[i+1]];
- second = arr[i+2];
- } else if(inst == "101") {
- first = arr[i+1];
- second = arr[arr[i+2]];
- } else {
- first = arr[arr[i+1]];
- second = arr[arr[i+2]];
- //cout << "none matching: " << inst << endl;
- }
- //cout << "first: " << inst << " " << first << " " << second << endl;
- arr[arr[i+3]] = first + second;
- } else if (inst[l] == '2') {
- int first, second;
- if (inst == "1102") {
- first = arr[i+1];
- second = arr[i+2];
- } else if (inst == "1002") {
- first = arr[arr[i+1]];
- second = arr[i+2];
- } else if (inst == "102") {
- first = arr[i+1];
- second = arr[arr[i+2]];
- } else {
- first = arr[arr[i+1]];
- second = arr[arr[i+2]];
- //cout << "none matching: " << inst << endl;
- }
- //cout << "inside 2: " << inst << first << " " << second << endl;
- arr[arr[i+3]] = first*second;
- } else if (inst == "99") {
- break;
- } else if (inst[l] == '4') {
- cout << "bdfgad" << endl;
- cout << i << endl;
- if (inst == "4")
- return {arr[arr[i+1]], i + 2};
- else return {arr[i+1], i + 2};
- } else if (inst[l] == '3') {
- int to_provide = inputs.front();
- cout << "provide: " << to_provide << endl;
- inputs.pop();
- if (inst == "103") arr[i+1] = to_provide;
- else arr[arr[i+1]] = to_provide;
- } else if (inst[l] == '5') {
- int first, second;
- if (inst == "1005") {
- first = arr[arr[i+1]];
- second = arr[i+2];
- } else if (inst == "105") {
- first = arr[i+1];
- second = arr[arr[i+2]];
- } else if (inst == "1105") {
- first = arr[i+1];
- second = arr[i+2];
- } else {
- first = arr[arr[i+1]];
- second = arr[arr[i+2]];
- }
- if (first != 0) {
- //cout << "jumping to: " << second << endl;
- i = second - 1;
- continue;
- }
- } else if (inst[l] == '6') {
- int first, second;
- if (inst == "1006") {
- first = arr[arr[i+1]];
- second = arr[i+2];
- } else if (inst == "106") {
- first = arr[i+1];
- second = arr[arr[i+2]];
- } else if (inst == "1106") {
- first = arr[i+1];
- second = arr[i+2];
- } else {
- first = arr[arr[i+1]];
- second = arr[arr[i+2]];
- }
- if (first == 0) {
- //cout << "jumping to: " << second << endl;
- i = second - 1;
- continue;
- }
- } else if(inst[l] == '7') {
- int first, second;
- if (inst == "1007") {
- first = arr[arr[i+1]];
- second = arr[i+2];
- } else if (inst == "107") {
- first = arr[i+1];
- second = arr[arr[i+2]];
- } else if (inst == "1107") {
- first = arr[i+1];
- second = arr[i+2];
- } else {
- first = arr[arr[i+1]];
- second = arr[arr[i+2]];
- }
- if (first < second) {
- arr[arr[i+3]] = 1;
- } else arr[arr[i+3]] = 0;
- } else if(inst[l] == '8') {
- int first, second;
- if (inst == "1008") {
- first = arr[arr[i+1]];
- second = arr[i+2];
- } else if (inst == "108") {
- first = arr[i+1];
- second = arr[arr[i+2]];
- } else if (inst == "1108") {
- first = arr[i+1];
- second = arr[i+2];
- } else {
- first = arr[arr[i+1]];
- second = arr[arr[i+2]];
- }
- if (first == second) {
- arr[arr[i+3]] = 1;
- } else arr[arr[i+3]] = 0;
- } else {
- cout << "bad" << endl;
- cout << i << endl;
- cout << inst << endl;
- break;
- }
- if (inst[l] == '4' || inst[l] == '3') i++;
- else if (inst[l] == '5' || inst[l] == '6') i = i + 2;
- else i = i + 3;
- }
- //cout << arr[0] << endl;
- return {-1, -1};
- }
- int main() {
- freopen("in.txt", "r", stdin);
- string s;
- cin >> s;
- cout << get_num("-672", 0, 3) << endl;
- vector<long long> arr;
- int last = 0;
- for (int i = 0; i < s.length(); i++) {
- if (s[i] == ',') {
- // arr.push_back(get_num(s, last, i - 1));
- string to_parse = s.substr(last, i - last);
- arr.push_back(get_num(to_parse, 0, last_num(to_parse)));
- last = i + 1;
- }
- }
- arr.push_back(get_num(s, last, s.length() - 1));
- for (int i = 0; i < arr.size(); i++) {
- cout << arr[i] << " ";
- }
- cout << endl;
- cout << "size: " << arr.size() << endl;
- /*for (int i = 0; i < arr.size(); i++) {
- string inst = to_string(arr[i]);
- int l = inst.length() - 1;
- if (inst[l] == '1') {
- int first, second;
- if (inst == "1101") {
- first = arr[i+1];
- second = arr[i+2];
- } else if (inst == "1001") {
- first = arr[arr[i+1]];
- second = arr[i+2];
- } else if(inst == "101") {
- first = arr[i+1];
- second = arr[arr[i+2]];
- } else {
- first = arr[arr[i+1]];
- second = arr[arr[i+2]];
- cout << "none matching: " << inst << endl;
- }
- cout << "first: " << inst << " " << first << " " << second << endl;
- arr[arr[i+3]] = first + second;
- } else if (inst[l] == '2') {
- int first, second;
- if (inst == "1102") {
- first = arr[i+1];
- second = arr[i+2];
- } else if (inst == "1002") {
- first = arr[arr[i+1]];
- second = arr[i+2];
- } else if (inst == "102") {
- first = arr[i+1];
- second = arr[arr[i+2]];
- } else {
- first = arr[arr[i+1]];
- second = arr[arr[i+2]];
- cout << "none matching: " << inst << endl;
- }
- cout << "inside 2: " << inst << first << " " << second << endl;
- arr[arr[i+3]] = first*second;
- } else if (inst == "99") {
- break;
- } else if (inst[l] == '4') {
- if (inst == "4" && arr[arr[i + 1]] == 0) {
- cout << "test passed!!!!!!!!!!!!!!!!!" << endl;
- } else if (inst == "104" && arr[i+1] == 0) {
- cout << "test passed!!!!!!!!!!!!!!!!!" << endl;
- } else {
- cout << "bdfgad" << endl;
- cout << i << endl;
- if (inst == "4")
- cout << arr[arr[i + 1]] << endl;
- else cout << arr[i+1] << endl;
- }
- } else if (inst[l] == '3') {
- if (inst == "103") arr[i+1] = 5;
- else arr[arr[i+1]] = 5;
- } else if (inst[l] == '5') {
- int first, second;
- if (inst == "1005") {
- first = arr[arr[i+1]];
- second = arr[i+2];
- } else if (inst == "105") {
- first = arr[i+1];
- second = arr[arr[i+2]];
- } else if (inst == "1105") {
- first = arr[i+1];
- second = arr[i+2];
- } else {
- first = arr[arr[i+1]];
- second = arr[arr[i+2]];
- }
- if (first != 0) {
- cout << "jumping to: " << second << endl;
- i = second - 1;
- continue;
- }
- } else if (inst[l] == '6') {
- int first, second;
- if (inst == "1006") {
- first = arr[arr[i+1]];
- second = arr[i+2];
- } else if (inst == "106") {
- first = arr[i+1];
- second = arr[arr[i+2]];
- } else if (inst == "1106") {
- first = arr[i+1];
- second = arr[i+2];
- } else {
- first = arr[arr[i+1]];
- second = arr[arr[i+2]];
- }
- if (first == 0) {
- cout << "jumping to: " << second << endl;
- i = second - 1;
- continue;
- }
- } else if(inst[l] == '7') {
- int first, second;
- if (inst == "1007") {
- first = arr[arr[i+1]];
- second = arr[i+2];
- } else if (inst == "107") {
- first = arr[i+1];
- second = arr[arr[i+2]];
- } else if (inst == "1107") {
- first = arr[i+1];
- second = arr[i+2];
- } else {
- first = arr[arr[i+1]];
- second = arr[arr[i+2]];
- }
- if (first < second) {
- arr[arr[i+3]] = 1;
- } else arr[arr[i+3]] = 0;
- } else if(inst[l] == '8') {
- int first, second;
- if (inst == "1008") {
- first = arr[arr[i+1]];
- second = arr[i+2];
- } else if (inst == "108") {
- first = arr[i+1];
- second = arr[arr[i+2]];
- } else if (inst == "1108") {
- first = arr[i+1];
- second = arr[i+2];
- } else {
- first = arr[arr[i+1]];
- second = arr[arr[i+2]];
- }
- if (first == second) {
- arr[arr[i+3]] = 1;
- } else arr[arr[i+3]] = 0;
- } else {
- cout << "bad" << endl;
- cout << i << endl;
- cout << inst << endl;
- break;
- }
- if (inst[l] == '4' || inst[l] == '3') i++;
- else if (inst[l] == '5' || inst[l] == '6') i = i + 2;
- else i = i + 3;
- }
- cout << arr[0] << endl;
- */
- int perm[] = {5,6,7,8,9};
- long long maxm = LLONG_MIN;
- vector<pair<vector<long long>, int>> curr_arr(5);
- vector<queue<long long>> inputs(5);
- //for (int i = 0; i < 5; i++) curr[i] = arr;
- int num_perms = 0;
- do {
- num_perms++;
- for (int i = 0; i < 5; i++) {
- curr_arr[i].first = arr;
- curr_arr[i].second = 0;
- inputs[i] = queue<long long>();
- inputs[i].push(perm[i]);
- }
- pair<long long, int> prev = {0, 0};
- bool b = true;
- long long curr_max = LLONG_MIN;
- int num = 0;
- int iter = 0;
- inputs[0].push(0LL);
- for (int i = 0; i < 5 && num < 5; i++) {
- prev = solve(curr_arr[i].first, curr_arr[i].second, inputs[i]);
- inputs[(i + 1) % 5].push(prev.first);
- curr_arr[i].second = prev.second;
- if (prev.first == -1) break;
- // cout << "hi :" << prev.first << endl;
- //for (int i = 0; i < 5; i++) cout << perm[i] << " ";
- //cout << endl;
- if (i == 4) {
- i = -1;
- curr_max = max(prev.first, curr_max);
- }
- iter++;
- }
- maxm = max(maxm, curr_max);
- } while (next_permutation(perm, perm + 5));
- for (int i = 0; i < arr.size(); i++) {
- cout << arr[i] << " ";
- }
- cout << endl;
- cout << "maximum is: " << maxm << " num perms: " << num_perms << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement