#include <bits/stdc++.h> #define LL_INF 1000000000000000007 typedef long long ll; typedef std::string str; typedef std::pair<ll, ll> llPair; template <typename T> using vec = std::vector<T>; using namespace std; ll n, m; // {a, b}, a -> gotowy, b -> nie gotowy vec<pair<ll,ll>> moves; ll tab; void print_bits(ll num) { for(ll i = 0; i < n; i++) { if(num & (1LL << i)) cout<<1; else cout<<0; } cout<<"\n"; } ll make_moves(ll end) { set<ll> anses; anses.insert(end); for(ll i = moves.size() - 1; i >= 0; i--) { auto [a, b] = moves[i]; // swap(a, b); // odwracamy operacje vec<ll> to_ins; vec<ll> to_erase; for(auto v : anses) { ll apos = v & (1LL << a); ll bpos = v & (1LL << b); if(bpos && !apos) { // dodajemy opcje v &= ~(1LL << b); v |= (1LL << a); to_ins.push_back(v); } else if(apos && !bpos) { to_erase.push_back(v); } } for(auto te : to_erase) anses.erase(te); for(auto ti : to_ins) anses.insert(ti); } return anses.size(); } int main() { ios_base::sync_with_stdio(false); cout.tie(nullptr); cin.tie(nullptr); cin >> n >> m; moves = vec<pair<ll,ll>>(m); for(int i = 0; i < m; i++) { ll a, b; cin>>a>>b; --a; --b; moves[i] = {a, b}; } for(ll i = 1LL; i <= n; i++) { tab = (1LL << i) - 1LL; ll sum = 0; // cout<<"i: "<<i<<"\n"; for(ll j = 0; j < (n - i + 1); j++) { ll tmp = tab << j; // print_bits(tmp); sum += make_moves(tmp); // anses.insert(res); } cout<<sum % 2<<" "; } cout.flush(); }
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 | #include <bits/stdc++.h> #define LL_INF 1000000000000000007 typedef long long ll; typedef std::string str; typedef std::pair<ll, ll> llPair; template <typename T> using vec = std::vector<T>; using namespace std; ll n, m; // {a, b}, a -> gotowy, b -> nie gotowy vec<pair<ll,ll>> moves; ll tab; void print_bits(ll num) { for(ll i = 0; i < n; i++) { if(num & (1LL << i)) cout<<1; else cout<<0; } cout<<"\n"; } ll make_moves(ll end) { set<ll> anses; anses.insert(end); for(ll i = moves.size() - 1; i >= 0; i--) { auto [a, b] = moves[i]; // swap(a, b); // odwracamy operacje vec<ll> to_ins; vec<ll> to_erase; for(auto v : anses) { ll apos = v & (1LL << a); ll bpos = v & (1LL << b); if(bpos && !apos) { // dodajemy opcje v &= ~(1LL << b); v |= (1LL << a); to_ins.push_back(v); } else if(apos && !bpos) { to_erase.push_back(v); } } for(auto te : to_erase) anses.erase(te); for(auto ti : to_ins) anses.insert(ti); } return anses.size(); } int main() { ios_base::sync_with_stdio(false); cout.tie(nullptr); cin.tie(nullptr); cin >> n >> m; moves = vec<pair<ll,ll>>(m); for(int i = 0; i < m; i++) { ll a, b; cin>>a>>b; --a; --b; moves[i] = {a, b}; } for(ll i = 1LL; i <= n; i++) { tab = (1LL << i) - 1LL; ll sum = 0; // cout<<"i: "<<i<<"\n"; for(ll j = 0; j < (n - i + 1); j++) { ll tmp = tab << j; // print_bits(tmp); sum += make_moves(tmp); // anses.insert(res); } cout<<sum % 2<<" "; } cout.flush(); } |