Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <vector>
- #include <set>
- using namespace std;
- string ten_to_2(int val, int need_size) {
- string s;
- while(val > 0) {
- s.push_back((val % 2) + '0');
- val /= 2;
- }
- for(int i = (int)s.size(); i < need_size; i++) {
- s.push_back('0');
- }
- return s;
- }
- bool smaller2(int first, int second, int n){
- string f = ten_to_2(first, n);
- string s = ten_to_2(second, n);
- for(int i = 0; i < n; i++) {
- if(f[i] == s[i]) {
- continue;
- }
- if(f[i] < s[i]) {
- return true;
- } else {
- return false;
- }
- }
- }
- int main() {
- int n; cin >> n;
- vector<int>f((1 << n));
- for(int i = 0; i < (1 << n); i++) {
- string s; cin >> s;
- cin >> f[i];
- }
- vector<int>a((1 << n));
- for(int i = 0; i < (1 << n); i++) {
- int val = f[i];
- for(int j = 0; j < i; j++) {
- if(smaller2(j, i, n)) {
- val = val ^ f[j];
- }
- }
- a[i] = val;
- }
- for(int i = 0; i < (1 << n); i++) {
- string ans = ten_to_2(i, n);
- reverse(ans.begin(), ans.end());
- cout << ans << " " << a[i] << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement