#include<bits/stdc++.h> using namespace std; const int N = 35; int dp(bitset<N> &P, int i, const vector<pair<int, int>> &O) { if(i < 0) { //cerr << P << "\n"; return 1; } if(P[O[i].first] == P[O[i].second]) return dp(P, i-1, O); if(P[O[i].first] && !P[O[i].second]) return 0; bitset<N> R = P; R.flip(O[i].first); R.flip(O[i].second); return (dp(R, i-1, O) + dp(P, i-1, O))%2; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, m; cin >> n >> m; vector<pair<int, int>> O; for(int i=0; i<m; i++) { int a, b; cin >> a >> b; a--; b--; O.push_back({a, b}); } vector<int> R(n); for(int i=1; i<=n; i++) { for(int j=0; j<=n-i; j++) { bitset<N> r; for(int k=j; k<j+i; k++) r.set(k); R[i-1] += dp(r, m-1, O); } R[i-1] %= 2; } for(auto it:R) cout << it << " "; cout << "\n"; }
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 | #include<bits/stdc++.h> using namespace std; const int N = 35; int dp(bitset<N> &P, int i, const vector<pair<int, int>> &O) { if(i < 0) { //cerr << P << "\n"; return 1; } if(P[O[i].first] == P[O[i].second]) return dp(P, i-1, O); if(P[O[i].first] && !P[O[i].second]) return 0; bitset<N> R = P; R.flip(O[i].first); R.flip(O[i].second); return (dp(R, i-1, O) + dp(P, i-1, O))%2; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, m; cin >> n >> m; vector<pair<int, int>> O; for(int i=0; i<m; i++) { int a, b; cin >> a >> b; a--; b--; O.push_back({a, b}); } vector<int> R(n); for(int i=1; i<=n; i++) { for(int j=0; j<=n-i; j++) { bitset<N> r; for(int k=j; k<j+i; k++) r.set(k); R[i-1] += dp(r, m-1, O); } R[i-1] %= 2; } for(auto it:R) cout << it << " "; cout << "\n"; } |