#include "registers.h"
void construct_instructions(int s, int n, int k, int q) {
// append_move(1, 0);
// append_right(1, 1, 1);
// append_and(0, 0, 1);
// for (int i = 0; i < n; ++i) {
// append_move(i + 1, 0);
// // append_print(i + 1);
// }
for (int i = 1; i <= 1; ++i) {
// append_left(i, i, (i - 1) * k);
append_right(i, 0, i * k);
append_left(i, i, i * k);
}
append_xor(2, 0, 1);
append_right(1, 1, 1 * k);
// for (int i = 0; i < n; ++i) {
// append_print(i + 1);
// }
int one = n + 3, one1 = n + 4;
append_not(one, one);
append_not(one1, one1);
append_left(one1, one1, 1);
append_xor(one, one1, one);
// append_print(one);
int dec = n + 5;
// a1 - a2
append_not(dec, 2);
append_add(dec, dec, one);
append_add(dec, dec, 1);
// append_print(dec);
//
int mult = n + 6;
// if mult = 1 => a1 > a2 else a2 >= a1
append_right(mult, dec, k * (n - 1));
append_and(mult, mult, one);
// append_print(mult);
//
// (a1 & ~(-mult)) | (a2 & -mult)
// nk1 = ~(-mult)
// nk2 = -mult
int res1 = n + 7, res2 = n + 10;
int nk1 = n + 8, nk2 = n + 9;
// -a = (~a + 1)
append_not(nk2, mult);
append_add(nk2, nk2, one);
// ~(-a) = ~(~a + 1)
append_not(nk1, nk2);
append_and(res1, 1, nk2);
append_and(res2, 2, nk1);
int res = n + 11;
append_or(res, res1, res2);
// append_right(mult, dec, k * (n - 1));
append_print(res);
append_move(0, res);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |