#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 2010
#define maxa 30
#define result_t pair<bool, pair<int,char>>
vector<pair<int,int>> orders;
unordered_set<ll> results, tmp;
ll initialize(int i, int x) {
ll mask = 0;
for (int j = 0; j < x; ++j) {
ll pot = i + j;
mask += (ll)(1LL<<pot);
}
return mask;
}
void apply_one(ll mask, ll a, ll b) {
bool is_a = ((mask & (1LL << a))) != 0;
bool is_b = ((mask & (1LL << b))) != 0;
if (!is_a && is_b) {
//cout << "A" << mask << endl;
results.insert(mask ^ ((1LL << a) + (1LL << b)));
results.insert(mask);
}
else if (is_a == is_b) {
results.insert(mask);
}
}
// ll solve_one(int i, int x, int n) {
// ll mask = initialize(i, x);
// for (auto order : orders) {
// mask = apply_one(mask, order.first, order.second);
// }
// cout << mask << endl;
// return mask;
// }
int solve(int x, int n) {
for (int i = 0; i + x <= n; ++i) {
results.insert(initialize(i, x));
}
for (auto order: orders) {
//cout << "NUMBERS: ";
tmp.clear();
results.swap(tmp);
for (auto it = tmp.begin(); it != tmp.end(); ++it) {
//cout << *it << " ";
apply_one(*it, order.first, order.second);
}
//cout << endl;
}
int res = (int)results.size() % 2;
results.clear();
return res;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n,m,a,b;
cin >> n >> m;
for (int i = 0; i < m; ++i) {
cin >> a >> b;
orders.push_back({a-1,b-1});
}
reverse(orders.begin(), orders.end());
//solve(1,n);
for (int i = 1; i <= n; ++i) {
string c = i == n ? " \n" : " ";
//solve(i,n);
cout << solve(i, n) << c;
}
}
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 | #include <bits/stdc++.h> using namespace std; #define ll long long #define maxn 2010 #define maxa 30 #define result_t pair<bool, pair<int,char>> vector<pair<int,int>> orders; unordered_set<ll> results, tmp; ll initialize(int i, int x) { ll mask = 0; for (int j = 0; j < x; ++j) { ll pot = i + j; mask += (ll)(1LL<<pot); } return mask; } void apply_one(ll mask, ll a, ll b) { bool is_a = ((mask & (1LL << a))) != 0; bool is_b = ((mask & (1LL << b))) != 0; if (!is_a && is_b) { //cout << "A" << mask << endl; results.insert(mask ^ ((1LL << a) + (1LL << b))); results.insert(mask); } else if (is_a == is_b) { results.insert(mask); } } // ll solve_one(int i, int x, int n) { // ll mask = initialize(i, x); // for (auto order : orders) { // mask = apply_one(mask, order.first, order.second); // } // cout << mask << endl; // return mask; // } int solve(int x, int n) { for (int i = 0; i + x <= n; ++i) { results.insert(initialize(i, x)); } for (auto order: orders) { //cout << "NUMBERS: "; tmp.clear(); results.swap(tmp); for (auto it = tmp.begin(); it != tmp.end(); ++it) { //cout << *it << " "; apply_one(*it, order.first, order.second); } //cout << endl; } int res = (int)results.size() % 2; results.clear(); return res; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n,m,a,b; cin >> n >> m; for (int i = 0; i < m; ++i) { cin >> a >> b; orders.push_back({a-1,b-1}); } reverse(orders.begin(), orders.end()); //solve(1,n); for (int i = 1; i <= n; ++i) { string c = i == n ? " \n" : " "; //solve(i,n); cout << solve(i, n) << c; } } |
English