显示原始代码
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdio>
using namespace std;
using std::vector;
void turn(int a, int index, int els, int m, vector<int> &l) {
els = a % 2;
m = (a - els) / 2;
if (m != 0)
l.push_back(els);
if (m != 1 && m != 0)
turn(a, index + 1, els, m, l);
}
void ope(vector<int> &q1, vector<int> &q2) {
int m = q1.size();
int n = q2.size();
vector<int> result;
if (m > n) {
for (int i = 0; i < m - n; i++) {
if (q1[i] == 0)
result.push_back(0);
else
result.push_back(1);
}
for (int j = m - n; j < m; j++) {
if (q1[j] == 1 && q2[j - m + n] == 1)
result.push_back(0);
if (q1[j] == 1 && q2[j - m + n] == 0)
result.push_back(1);
if (q1[j] == 0 && q2[j - m + n] == 1)
result.push_back(1);
else
result.push_back(0);
}
} else {
for (int i = 0; i < n - m; i++) {
if (q2[i] == 0)
result.push_back(0);
else
result.push_back(1);
}
for (int j = n - m; j < n; j++) {
if (q2[j] == 1 && q1[j - n + m] == 1)
result.push_back(0);
if (q2[j] == 1 && q1[j - n + m] == 0)
result.push_back(1);
if (q2[j] == 0 && q1[j - n + m] == 1)
result.push_back(1);
if (q2[j] == 0 && q1[j - n + m] == 0)
result.push_back(0);
}
}
q2.clear();
for (int l = 0; l < result.size(); l++) q2.push_back(result[l]);
result.clear();
}
int rturn(vector<int> &b1) {
int sum = 0, temp = 1;
for (int i = 0; i < b1.size(); i++) {
temp = 1;
for (int j = b1.size() - i - 1; j > 0; j--) {
temp = temp * 2;
}
sum = sum + temp * b1[i];
}
return sum;
}
int main() {
vector<vector<int> > a;
int n;
cin >> n;
int iden, temp;
vector<int> m, las, empty, results;
empty.push_back(1);
for (int i = 0; i < n; i++) {
cin >> iden;
for (int t = 0; t < i; t++) a.push_back(empty);
if (iden == 2) {
cin >> temp;
m.push_back(temp);
a.push_back(empty);
} else {
for (int j = 0; j < m.size(); j++) m[j] = m[j] + 1;
}
for (int s = 0; s < m.size(); s++) {
turn(m[s], 0, 0, 0, a[s]);
}
results = a[0];
for (int y = 1; y < a.size(); y++) {
ope(a[y], results);
}
las.push_back(rturn(results));
a.clear();
results.clear();
}
for (int k = 0; k < las.size(); k++) cout << las[k] << endl;
return 0;
}