Advertisement
Guest User

Untitled

a guest
Nov 10th, 2021
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.75 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <algorithm>
  4. #include <queue>
  5. #include <vector>
  6. #include <map>
  7. #include <set>
  8. #include <unordered_set>
  9. #include <stack>
  10. #include <iomanip>
  11. #include <cstring>
  12. #include <string>
  13. #include <cstdio>
  14. // #include <bits/stdc++.h>
  15.  
  16. #pragma GCC push_options
  17. #pragma GCC optimize ("O0")
  18.  
  19. using namespace std;
  20.  
  21. typedef string str;
  22. typedef long long ll;
  23. typedef double db;
  24. typedef long double ld;
  25. typedef unsigned long long ull;
  26. typedef pair <int, int> pii;
  27. typedef pair <ll, ll> pll;
  28. typedef pair <db, db> pdd;
  29. typedef pair <ld, ld> pld;
  30. typedef ll var;
  31. typedef pair <var, var> pvv;
  32.  
  33.  
  34. #define sync ios_base::sync_with_stdio(false)
  35. #define printbool cout << (solve() ? "YES" : "NO") << '\n'
  36. #define updiv(ad, bd) (((ad - 1) / bd ) + 1)
  37. #define mod(ad, bd) ((((ad) % (bd)) + (bd)) % (bd))
  38. #define mxz(ad, bd) ad = max( ad, bd )
  39. #define mnz(ad, bd) ad = min( ad, bd )
  40. #define maxx(ad, bd, c) max(ad, max(bd, c))
  41. #define minn(ad, bd, c) min(ad, min(bd, c))
  42. #define arr(ad, bd, cd) (ad + bd), (ad + bd +cd)
  43. #define all(ad) ad.begin(), ad.end()
  44. #define sorts(ad) sort(all(ad))
  45. #define sorta(ad, bd, cd) sort(arr(ad, bd, cd))
  46. #define rvs(ad) reverse(all(ad))
  47. #define rva(ad, bd, cd) reverse(arr(ad, bd, cd))
  48. #define gl(ad) getline(cin, ad)
  49. #define wfloat(ad) fixed << setprecision(ad)
  50. #define pr(ad, bd) pair <(ad), (bd)>
  51. #define mlx(ad, bd) max(1ll * (ad), 1ll * (bd))
  52. #define mln(ad, bd) min(1ll * (ad), 1ll * (bd))
  53.  
  54. template <typename T>
  55. inline T gcd(T a, T b) { while (b != 0) swap(b, a %= b); return a; }
  56.  
  57. #define SD "\033[1m\033[31m"
  58. #define ED "\033[0m"
  59. #define RESET "\033[0m"
  60. #define BLACK "\033[30m" /* Black */
  61. #define RED "\033[31m" /* Red */
  62. #define GREEN "\033[32m" /* Green */
  63. #define YELLOW "\033[33m" /* Yellow */
  64. #define BLUE "\033[34m" /* Blue */
  65. #define MAGENTA "\033[35m" /* Magenta */
  66. #define CYAN "\033[36m" /* Cyan */
  67. #define WHITE "\033[37m" /* White */
  68. #define BOLDBLACK "\033[1m\033[30m" /* Bold Black */
  69. #define BOLDRED "\033[1m\033[31m" /* Bold Red */
  70. #define BOLDGREEN "\033[1m\033[32m" /* Bold Green */
  71. #define BOLDYELLOW "\033[1m\033[33m" /* Bold Yellow */
  72. #define BOLDBLUE "\033[1m\033[34m" /* Bold Blue */
  73. #define BOLDMAGENTA "\033[1m\033[35m" /* Bold Magenta */
  74. #define BOLDCYAN "\033[1m\033[36m" /* Bold Cyan */
  75. #define BOLDWHITE "\033[1m\033[37m" /* Bold White */
  76. #define sdebug cout << BOLDRED
  77. #define edebug cout << RESET
  78.  
  79. #ifdef DEBUG
  80. void debug(const auto &c, const auto &e, const auto &... r) {
  81. cout << c << e;
  82. ((cout << " " << r), ..., (cout << ED << endl));
  83. }
  84. void dout(const auto &c, const auto &e, const auto &... r) {
  85. cout << c << e;
  86. ((cout << " " << r), ..., (cout << ED << " "));
  87. }
  88. #else
  89. #define debug(...)
  90. #define dout(...)
  91. #endif
  92.  
  93. // cerr << 1.0 * clock() / CLOCKS_PER_SEC << endl;
  94.  
  95. #define rv reverse
  96. #define cl clear
  97. #define nl endl
  98. #define pb push_back
  99. #define pf push_front
  100. #define ppb pop_back
  101. #define ppf pop_front
  102. #define pu push
  103. #define pp pop
  104. #define in insert
  105. #define er erase
  106. #define mp make_pair
  107. #define popcnt __builtin_popcount
  108. #define np next_permutation
  109. #define lb lower_bound // <=
  110. #define ub upper_bound // <
  111. #define rand mt19937_64
  112. #define tp top
  113. #define ft front
  114. #define et empty
  115. #define sz size
  116. #define op operator
  117. #define f first
  118. #define s second
  119. #define y1 yyyyy
  120. #define cont continue
  121. // #define x first
  122. // #define y second
  123.  
  124. // freopen("text.in", "r", stdin);
  125. // freopen("text.out", "w", stdout);
  126.  
  127. // pii dr[8] = { mp(2, 1), mp(2, -1), mp(-2, 1), mp(-2, -1), mp(1, 2), mp(1, -2), mp(-1, 2), mp(-1, -2) };
  128.  
  129. const int dx[] = {0, 1, 0, -1, 1, -1, -1, 1};
  130. const int dy[] = {1, 0, -1, 0, 1, -1, 1, -1};
  131.  
  132. const ll LINF = 1e18; //infinity
  133. const double EPS = 1e-6 ; //epsilon
  134. const double PI = 3.14159; //pi
  135. const ll B = 31 ; //hashbase
  136. const ll LG = 11; //logarithm
  137. const ll INF = 1e9; //infinity
  138. const ll M = 1e9 + 7; //mod
  139. const ll N = 1e6 + 9; //maxn
  140.  
  141. int n;
  142. int a[N];
  143. set <int> v;
  144. map <int, int> ma;
  145. int ans = -1;
  146.  
  147. void solve(int l, int r, int i) {
  148. if (i == n/2+1) {
  149. v.in(l-r);
  150. mxz(ma[l-r], r);
  151. return;
  152. }
  153. solve(l+a[i], r, i+1);
  154. solve(l, r+a[i], i+1);
  155. solve(l, r, i+1);
  156. }
  157.  
  158. void solve2(int l, int r, int i) {
  159. if (i == n+1) {
  160. if (v.find(r-l) != v.end()) {
  161. if (r+ma[r-l] > 0)
  162. mxz(ans, r+ma[r-l]);
  163. }
  164. return;
  165. }
  166. solve2(l+a[i], r, i+1);
  167. solve2(l, r+a[i], i+1);
  168. solve2(l, r, i+1);
  169. }
  170.  
  171. int main() {
  172. sync;
  173. cin >> n;
  174. for (int i = 1; i <= n; ++i) {
  175. cin >> a[i];
  176. }
  177. solve(0, 0, 1);
  178. solve2(0, 0, n/2+1);
  179. cout << ans << '\n';
  180. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement