GerONSo

Untitled

Jan 5th, 2020
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.35 KB | None | 0 0
  1. /*
  2.  
  3. ∧_∧
  4. ( ・ω・。)つ━☆・*。
  5. ⊂  ノ    ・゜
  6. しーJ   Accepted
  7.  
  8. */
  9.  
  10.  
  11.  
  12. // #pragma GCC optimize("O3")
  13. // #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
  14.  
  15. #include <bits/stdc++.h>
  16. #include <ext/pb_ds/assoc_container.hpp>
  17. #include <ext/pb_ds/tree_policy.hpp>
  18.  
  19. #define ll long long
  20. #define all(x) begin(x), end(x)
  21. #define x first
  22. #define y second
  23. #define int long long
  24.  
  25. using namespace std;
  26. using namespace __gnu_pbds;
  27.  
  28. typedef long double ld;
  29. template<typename T>
  30. using kawaii_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
  31.  
  32. const ld PI = atan2(0, -1);
  33.  
  34. void seriy() {
  35. ios::sync_with_stdio(0);
  36. cin.tie(0);
  37. cout.tie(0);
  38. cout << fixed << setprecision(14);
  39. #ifdef _offline
  40. freopen("input.txt", "r", stdin);
  41. freopen("output.txt", "w", stdout);
  42. #endif
  43. }
  44.  
  45. const int MAXN = 3e5 + 100;
  46. const int MAXM = 600;
  47. const int INF = 1e18 + 7;
  48. const int BASE = 47;
  49. const int MOD = 1e9 + 7;
  50. const int MAXLOG = 51;
  51. const ld EPS = 1e-6;
  52.  
  53. vector<int> cnt(MAXLOG);
  54. vector<string> a;
  55. int n;
  56. string b;
  57.  
  58. void add(string &s, int pw) {
  59. int p = pw;
  60. while(s.size() - 1 < p) {
  61. s += '0';
  62. }
  63. while(p < s.size() && s[p] == '1') {
  64. s[p] = '0';
  65. p++;
  66. }
  67. // cerr << s << " " << p << '\n';
  68. if(p < s.size()) {
  69. s[p] = '1';
  70. }
  71. else {
  72. s += '1';
  73. }
  74. }
  75.  
  76. void subtract(string &s, int pw) {
  77. int p = pw;
  78. while(p < s.size() && s[p] == '0') {
  79. s[p] = '1';
  80. p++;
  81. }
  82. s[p] = '0';
  83. }
  84.  
  85. string xor1(string &a, string &b) {
  86. string ans;
  87. ans.resize(max(a.size(), b.size()), '0');
  88. for(int i = 0; i < max(a.size(), b.size()); i++) {
  89. if(i < min(a.size(), b.size())) {
  90.  
  91. }
  92. else if(a.size() < b.size()) {
  93. a += '0';
  94. }
  95. else {
  96. b += '0';
  97. }
  98. ans[i] = ((a[i] == b[i]) ? '0' : '1');
  99. }
  100. return ans;
  101. }
  102.  
  103. string ans = "-1";
  104.  
  105. void solve(string cur, int pw, string cur_sum) {
  106. if(pw > b.size()) {
  107. return;
  108. }
  109. // cerr << cur << " " << cur_sum << '\n';
  110. string kek = cur_sum;
  111. while(kek.back() == '0') {
  112. kek.pop_back();
  113. }
  114. if(!kek.size()) {
  115. kek = "0";
  116. }
  117. if(kek == b) {
  118. ans = cur;
  119. return;
  120. }
  121. if(cur_sum[pw] == b[pw]) {
  122. cur += '0';
  123. solve(cur, pw + 1, cur_sum);
  124. cur.pop_back();
  125. }
  126. if(ans != "-1") {
  127. return;
  128. }
  129. string sum = "0";
  130. for(int i = 0; i < n; i++) {
  131. add(a[i], pw);
  132. sum = xor1(sum, a[i]);
  133. }
  134. // cerr << sum << " " << pw << '\n';
  135. if(sum[pw] == b[pw]) {
  136. cur += '1';
  137. solve(cur, pw + 1, sum);
  138. }
  139. for(int i = 0; i < n; i++) {
  140. subtract(a[i], pw);
  141. }
  142. }
  143.  
  144. signed main() {
  145. seriy();
  146. cin >> n;
  147. a.resize(n);
  148. string cur_sum = "0";
  149. for(int i = 0; i < n; i++) {
  150. string h;
  151. cin >> h;
  152. a[i] = h;
  153. reverse(all(a[i]));
  154. cur_sum = xor1(cur_sum, a[i]);
  155. }
  156. string bb;
  157. cin >> bb;
  158. b = bb;
  159. reverse(all(b));
  160. solve("", 0, cur_sum);
  161. reverse(all(ans));
  162. if(ans == "1-") ans = "-1";
  163. cout << ((ans == "-1") ? "-1" : ans);
  164. return 0;
  165. }
Add Comment
Please, Sign In to add comment