Advertisement
BaoJIaoPisu

Untitled

Oct 11th, 2022
741
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.74 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. using ll = long long;
  6. using ld = long double;
  7. using ull = unsigned long long;
  8.  
  9. using pii = pair<int, int>;
  10. using pll = pair<ll, ll>;
  11. using pld = pair<ld, ld>;
  12.  
  13. #define fi first
  14. #define se second
  15. #define pb push_back
  16. #define pf push_front
  17. #define mp make_pair
  18. #define ins insert
  19. #define btpc __builtin_popcount
  20. #define btclz __builtin_clz
  21.  
  22. #define sz(x) (int)(x.size());
  23. #define all(x) x.begin(), x.end()
  24. #define debug(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "
  25.  
  26. mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  27.  
  28. int d4x[4] = {1, 0, -1, 0}; int d4y[4] = {0, 1, 0, -1};
  29. int d8x[8] = {0, 1, 1, 1, 0, -1, -1, -1};
  30. int d8y[8] = {1, 1, 0, -1, -1, -1, 0, 1};
  31.  
  32. template<class X, class Y>
  33.     bool minimize(X &x, const Y &y) {
  34.         if (x > y)
  35.         {
  36.             x = y;
  37.             return true;
  38.         }
  39.         return false;
  40.     }
  41. template<class X, class Y>
  42.     bool maximize(X &x, const Y &y) {
  43.         if (x < y)
  44.         {
  45.             x = y;
  46.             return true;
  47.         }
  48.         return false;
  49.     }
  50.  
  51. const int MOD = 1e9 + 7; //998244353
  52.  
  53. template<class X, class Y>
  54.     void add(X &x, const Y &y) {
  55.         x = (x + y);
  56.         if(x >= MOD) x -= MOD;
  57.     }
  58.  
  59. template<class X, class Y>
  60.     void sub(X &x, const Y &y) {
  61.         x = (x - y);
  62.         if(x < 0) x += MOD;
  63.     }
  64.  
  65. /* Author : Le Ngoc Bao Anh, 12A5, LQD High School for Gifted Student*/
  66.  
  67. const ll INF = 1e9;
  68. const int N = 20 + 10;
  69. const int M = (1 << 20) + 10;
  70.  
  71. ll a[N], b[N];
  72. vector<int> bit[M];
  73. vector<int> v[21];
  74. int cnt[M], ok[M];
  75.  
  76. void solve() {
  77.     int n, H; cin >> n >> H;
  78.     ll sum = 0;
  79.    
  80.     for(int i = 0; i < (1 << n); i++) cnt[i] = ok[i] = 0;
  81.  
  82.     for(int i = 1; i <= n; i++) cin >> a[i];
  83.     for(int i = 1; i <= n; i++) {
  84.         cin >> b[i];
  85.         sum += b[i];
  86.     }
  87.  
  88.     ll ans = 0;
  89.     for(int msk = 0; msk < (1 << n); msk++) {
  90.         ll x = 0, y = 0;
  91.         for(auto i : bit[msk]) x += a[i], y += b[i];
  92.         if(x >= H) cnt[msk ^ ((1 << n) - 1)]++;
  93.         if(y >= H) ok[msk] = true;
  94.     }
  95.  
  96.     for(int i = n - 1; i >= 0; i--) {
  97.         for(auto msk : v[i]) cnt[msk] += cnt[msk ^ (1 << i)];
  98.     }
  99.    
  100.     for(int msk = 0; msk < (1 << n); msk++) {
  101.         ans += cnt[msk] * ok[msk];
  102.     }  
  103.  
  104.     cout << ans << '\n';
  105. }
  106.  
  107. int main()
  108. {
  109.     ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  110.     #ifndef ONLINE_JUDGE
  111.     freopen("input.txt", "r", stdin);
  112.     freopen("output.txt", "w", stdout);
  113.     #else
  114.     //online
  115.     #endif
  116.  
  117.     int n = 20;
  118.     for(int i = 1; i < (1 << n); i++) {
  119.         for(int j = 0; j < n; j++) if(i >> j & 1) {
  120.             bit[i].pb(j + 1);
  121.             v[j].pb(i);
  122.         }
  123.     }
  124.  
  125.     int tc = 1, ddd = 0;
  126.     cin >> tc;
  127.     while(tc--) {
  128.         //ddd++;
  129.         //cout << "Case #" << ddd << ": ";
  130.         solve();
  131.     }
  132. }
  133.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement