#include <iostream>
#include <algorithm>
#define int long long
using namespace std;
const int N = 1<<15;
int W = 14;//14;
int T[15][N];
vector <int> bazy_potegowe[15];
vector <int> odp[(N>>2) + 5];
int liczby_jedynek[N] = {0};
vector <int> mnozenie(const vector <int> &a,const vector <int> &b){
vector <int> c;
for (unsigned int i = 0; i < a.size(); ++i){
for (unsigned int j = 0; j < b.size(); ++j){
c.push_back(a[i] + b[j]);
}
}
sort(c.begin(), c.end());
vector <int> d;
for (unsigned int i = 0; i < c.size(); ++i){
int k = 1;
while(i != c.size()-1 && c[i] == c[i+1]){
++i;
++k;
}
if (k&1)d.push_back(c[i]);
}
return d;
}
main (){
ios::sync_with_stdio(0);
T[0][0] = 1;
for (int i = 0; i < W; ++i){
for (int j = 0; j < (1<<i); ++j){
T[i+1][2*j] += T[i][j];
T[i+1][2*j] &= 1;
T[i+1][j + (1 << i)] += T[i][j];
T[i+1][j + (1 << i)] &= 1;
}
}
for (int i = 0; i <= W; ++i){
for (int j = 0; j < (1<<i); ++j){
if(T[i][j]){
bazy_potegowe[i].push_back(j);
}
}
bazy_potegowe[i].push_back(1<<i);///trol den
}
for (int i = 0; i <= (N>>2); ++i){
vector <int> x;
x.push_back(0);
for (int j = W; j >= 0; --j){
if (i &(1<<j)){
if (x.size() == 1){
x = bazy_potegowe[j];
x.pop_back();
}
else x = mnozenie(x, bazy_potegowe[j]);
}
}
odp[i] = x;
}
int z;
cin >> z;
int n = 0;
int k = 0;
for (int i = 0; i < z; ++i){
cin >> n >> k;
if (n <= (1<<13)){
if (binary_search(odp[n].begin(), odp[n].end(), k))cout <<"1\n";
else cout <<"0\n";
}
else if(n == (1 << 14)){
if (binary_search(bazy_potegowe[14].begin(), bazy_potegowe[14].end(), k))cout <<"1\n";
else cout <<"0\n";
}
else {
int x = 0;
for (int j = 0; j < 8; ++j){
if (binary_search(odp[n - (1<<13)].begin(), odp[n-(1<<13)].end(), k - bazy_potegowe[13][j])) ++x;
}
if(x&1){
cout <<"1\n";
}
else cout <<"0\n";
}
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | #include <iostream> #include <algorithm> #define int long long using namespace std; const int N = 1<<15; int W = 14;//14; int T[15][N]; vector <int> bazy_potegowe[15]; vector <int> odp[(N>>2) + 5]; int liczby_jedynek[N] = {0}; vector <int> mnozenie(const vector <int> &a,const vector <int> &b){ vector <int> c; for (unsigned int i = 0; i < a.size(); ++i){ for (unsigned int j = 0; j < b.size(); ++j){ c.push_back(a[i] + b[j]); } } sort(c.begin(), c.end()); vector <int> d; for (unsigned int i = 0; i < c.size(); ++i){ int k = 1; while(i != c.size()-1 && c[i] == c[i+1]){ ++i; ++k; } if (k&1)d.push_back(c[i]); } return d; } main (){ ios::sync_with_stdio(0); T[0][0] = 1; for (int i = 0; i < W; ++i){ for (int j = 0; j < (1<<i); ++j){ T[i+1][2*j] += T[i][j]; T[i+1][2*j] &= 1; T[i+1][j + (1 << i)] += T[i][j]; T[i+1][j + (1 << i)] &= 1; } } for (int i = 0; i <= W; ++i){ for (int j = 0; j < (1<<i); ++j){ if(T[i][j]){ bazy_potegowe[i].push_back(j); } } bazy_potegowe[i].push_back(1<<i);///trol den } for (int i = 0; i <= (N>>2); ++i){ vector <int> x; x.push_back(0); for (int j = W; j >= 0; --j){ if (i &(1<<j)){ if (x.size() == 1){ x = bazy_potegowe[j]; x.pop_back(); } else x = mnozenie(x, bazy_potegowe[j]); } } odp[i] = x; } int z; cin >> z; int n = 0; int k = 0; for (int i = 0; i < z; ++i){ cin >> n >> k; if (n <= (1<<13)){ if (binary_search(odp[n].begin(), odp[n].end(), k))cout <<"1\n"; else cout <<"0\n"; } else if(n == (1 << 14)){ if (binary_search(bazy_potegowe[14].begin(), bazy_potegowe[14].end(), k))cout <<"1\n"; else cout <<"0\n"; } else { int x = 0; for (int j = 0; j < 8; ++j){ if (binary_search(odp[n - (1<<13)].begin(), odp[n-(1<<13)].end(), k - bazy_potegowe[13][j])) ++x; } if(x&1){ cout <<"1\n"; } else cout <<"0\n"; } } return 0; } |
English