#include <bits/stdc++.h> using namespace std; unordered_set<int> us; long long xd(string s) { us.clear(); int n = s.size(); for(int b = 0; b < (1<<n); ++b) { bool ok = true; int prefiks = 0; int id = 0; for(int i = 0; i < n; ++i) if(b & (1 << i)) { if((prefiks += s[i]) < 0) { ok = false; break; } id <<= 1; id |= (1 & (s[i] == -1)); } if(!ok || prefiks != 0) continue; us.insert(id); } return us.size() - 1; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; vector<string> s(n); for(auto &&e : s) cin >> e; for(auto &&e : s) for(auto &&c : e) c = c == 'L' ? 1 : -1; for(auto &&i : s) { for(auto &&j : s) cout << xd(i+j) << ' '; 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 | #include <bits/stdc++.h> using namespace std; unordered_set<int> us; long long xd(string s) { us.clear(); int n = s.size(); for(int b = 0; b < (1<<n); ++b) { bool ok = true; int prefiks = 0; int id = 0; for(int i = 0; i < n; ++i) if(b & (1 << i)) { if((prefiks += s[i]) < 0) { ok = false; break; } id <<= 1; id |= (1 & (s[i] == -1)); } if(!ok || prefiks != 0) continue; us.insert(id); } return us.size() - 1; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; vector<string> s(n); for(auto &&e : s) cin >> e; for(auto &&e : s) for(auto &&c : e) c = c == 'L' ? 1 : -1; for(auto &&i : s) { for(auto &&j : s) cout << xd(i+j) << ' '; cout << '\n'; } } |