Advertisement
Guest User

D

a guest
Nov 4th, 2017
509
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.36 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define fs first
  4. #define sc second
  5. #define mp make_pair
  6. #define eb emplace_back
  7. #define sz(s) ((int) s.size())
  8. #define all(s) s.begin(), s.end()
  9.  
  10. using namespace std;
  11.  
  12. typedef long long ll;
  13. typedef vector<int> vi;
  14. typedef pair<int, int> ii;
  15. typedef unsigned long long ull;
  16.  
  17. const ll linf = (ll) 1e18;
  18.  
  19. const int A = 26;
  20. const int L = 17;
  21. const int B = 315;
  22. const int N = (int) 4e1;
  23. const int inf = (int) 1e9 + 7;
  24. const int mod = (int) 1e9 + 7;
  25.  
  26. const int di[] = {-1, +0, +1, +0};
  27. const int dj[] = {+0, +1, +0, -1};
  28.  
  29. const ull P = 997;
  30. const ull hmod = (ull) 1e9 + 7;
  31.  
  32. const double pi = acos(-1.0);
  33. const double eps = 1e-11;
  34.  
  35. int h[N];
  36. int g[N];
  37.  
  38. vector<long long> c[N >> 1];
  39.  
  40. inline void init() {
  41.    
  42. }
  43. inline void solve() {
  44.     int n; long long k; cin >> n >> k;
  45.     for (int i = 0; i < n; i++) {
  46.         cin >> h[i] >> g[i];
  47.     }  
  48.     int x = n >> 1;
  49.     long long ans = 0;
  50.     for (int i = 1; i < (1 << x); i++) {
  51.         bool f = 0;
  52.         int last = 0;
  53.         for (int j = 0; j < x; j++) {
  54.             if ((i >> j) & 1) {
  55.                 if (h[j] < last) {
  56.                     f = 1;
  57.                     break;
  58.                 }
  59.                 last = h[j];               
  60.             }
  61.         }
  62.         if (!f) {
  63.             last = -1;
  64.             long long cur = 0;
  65.             for (int j = 0; j < x; j++) {
  66.                 if ((i >> j) & 1) {
  67.                     cur += g[j];                                   
  68.                     last = j;
  69.                 }
  70.             }
  71.             if (cur >= k) {
  72.                 ans++; 
  73.             }
  74.             c[last].eb(cur);           
  75.         }              
  76.     }
  77.     for (int i = 0; i < x; i++) {
  78.         sort(all(c[i]));
  79.     }
  80.     /* upper part was first part, now goes second */
  81.     reverse(h, h + n);
  82.     reverse(g, g + n);
  83.     int y = n - x;
  84.     for (int i = 1; i < (1 << y); i++) {
  85.         bool f = 0;
  86.         int last = inf;
  87.         for (int j = 0; j < y; j++) {
  88.             if ((i >> j) & 1) {
  89.                 if (h[j] > last) {
  90.                     f = 1;
  91.                     break;
  92.                 }
  93.                 last = h[j];               
  94.             }
  95.         }
  96.         if (!f) {
  97.             last = -1;
  98.             long long cur = 0;
  99.             for (int j = 0; j < y; j++) {
  100.                 if ((i >> j) & 1) {
  101.                     cur += g[j];                                   
  102.                     last = j;
  103.                 }
  104.             }
  105.             if (cur >= k) {
  106.                 ans++;
  107.             }
  108.             for (int j = y; j < n; j++) {
  109.                 if (h[last] >= h[j]) {
  110.                     int p = n - j - 1;             
  111.                     int pos = lower_bound(all(c[p]), k - cur) - c[p].begin();
  112.                     ans += sz(c[p]) - pos;         
  113.                 }
  114.             }
  115.         }              
  116.     }
  117.     cout << ans;
  118. }
  119. int main() {
  120.     #ifdef LOCAL
  121.         #define name ""
  122.         freopen(name".in", "r", stdin);
  123.         freopen(name".out", "w", stdout);
  124.     #endif
  125.     int tests = 1;
  126.     while (tests--) {
  127.         init();
  128.         solve();
  129.     }
  130.     return 0;
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement