Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define fs first
- #define sc second
- #define mp make_pair
- #define eb emplace_back
- #define sz(s) ((int) s.size())
- #define all(s) s.begin(), s.end()
- using namespace std;
- typedef long long ll;
- typedef vector<int> vi;
- typedef pair<int, int> ii;
- typedef unsigned long long ull;
- const ll linf = (ll) 1e18;
- const int A = 26;
- const int L = 17;
- const int B = 315;
- const int N = (int) 4e1;
- const int inf = (int) 1e9 + 7;
- const int mod = (int) 1e9 + 7;
- const int di[] = {-1, +0, +1, +0};
- const int dj[] = {+0, +1, +0, -1};
- const ull P = 997;
- const ull hmod = (ull) 1e9 + 7;
- const double pi = acos(-1.0);
- const double eps = 1e-11;
- int h[N];
- int g[N];
- vector<long long> c[N >> 1];
- inline void init() {
- }
- inline void solve() {
- int n; long long k; cin >> n >> k;
- for (int i = 0; i < n; i++) {
- cin >> h[i] >> g[i];
- }
- int x = n >> 1;
- long long ans = 0;
- for (int i = 1; i < (1 << x); i++) {
- bool f = 0;
- int last = 0;
- for (int j = 0; j < x; j++) {
- if ((i >> j) & 1) {
- if (h[j] < last) {
- f = 1;
- break;
- }
- last = h[j];
- }
- }
- if (!f) {
- last = -1;
- long long cur = 0;
- for (int j = 0; j < x; j++) {
- if ((i >> j) & 1) {
- cur += g[j];
- last = j;
- }
- }
- if (cur >= k) {
- ans++;
- }
- c[last].eb(cur);
- }
- }
- for (int i = 0; i < x; i++) {
- sort(all(c[i]));
- }
- /* upper part was first part, now goes second */
- reverse(h, h + n);
- reverse(g, g + n);
- int y = n - x;
- for (int i = 1; i < (1 << y); i++) {
- bool f = 0;
- int last = inf;
- for (int j = 0; j < y; j++) {
- if ((i >> j) & 1) {
- if (h[j] > last) {
- f = 1;
- break;
- }
- last = h[j];
- }
- }
- if (!f) {
- last = -1;
- long long cur = 0;
- for (int j = 0; j < y; j++) {
- if ((i >> j) & 1) {
- cur += g[j];
- last = j;
- }
- }
- if (cur >= k) {
- ans++;
- }
- for (int j = y; j < n; j++) {
- if (h[last] >= h[j]) {
- int p = n - j - 1;
- int pos = lower_bound(all(c[p]), k - cur) - c[p].begin();
- ans += sz(c[p]) - pos;
- }
- }
- }
- }
- cout << ans;
- }
- int main() {
- #ifdef LOCAL
- #define name ""
- freopen(name".in", "r", stdin);
- freopen(name".out", "w", stdout);
- #endif
- int tests = 1;
- while (tests--) {
- init();
- solve();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement