답안 #82574

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
82574 2018-10-31T13:57:39 Z luciocf San (COCI17_san) C++14
24 / 120
327 ms 1784 KB
#include <bits/stdc++.h>

using namespace std;

const int maxn = 45;

typedef long long ll;
typedef pair<int, int> pii;

int n;

pii num[maxn], b[maxn];

vector<int> v[maxn];

void compress(void)
{
	map<int, int> M;
	vector<int> cc;

	for (int i = 0; i < n; i++)
		cc.push_back(num[i].first);

	sort(cc.begin(), cc.end());

	int ind = 0;
	for (auto x: cc)
		if (M.find(x) == M.end())
			M[x] = ++ind;

	for (int i = 0; i < n; i++)
		num[i].first = M[num[i].first];
}

int main(void)
{
	ios::sync_with_stdio(false); cin.tie(0);

	ll k;
	cin >> n >> k;

	for (int i = 0; i < n; i++)
		cin >> num[i].first >> num[i].second;

	compress();

	int m = n/2;

	for (int i = m; i < n; i++)
		b[i-m] = num[i];

	ll ans = 0LL;
	for (int mask = 1; mask < (1<<m); mask++)
	{
		int atual = 0;
		ll soma = 0LL;

		bool ok = 1;
		for (int i = 0; i < m; i++)
		{
			if (!(mask&(1<<i))) continue;

			if (num[i].first < atual)
			{
				ok = 0;
				break;
			}

			soma += (ll) num[i].second;
			atual = num[i].first;
		}

		if (ok)
		{
			if (soma >= k) ans++;

			v[atual].push_back(soma);
		}
	}

	for (int i = 1; i <= n; i++)
		sort(v[i].begin(), v[i].end());

	int mm = n-m;
	for (int mask = 1; mask < (1<<mm); mask++)
	{
		int atual = 0;
		ll soma = 0LL;

		bool ok = 1;
		for (int i = 0; i < mm; i++)
		{
			if (!(mask&(1<<i))) continue;

			if (b[i].first < atual)
			{
				ok = 0;
				break;
			}

			soma += (ll) b[i].second;
			atual = b[i].first;
		}

		if (ok)
		{
			if (soma >= k) ans++;

			for (int i = 1; i <= atual; i++)
			{
				vector<int>::iterator it = lower_bound(v[i].begin(), v[i].end(), k-soma);
				ans += (ll)((int)(v[i].end()-it));
			}
		}
	}

	cout << ans << "\n";
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 376 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 380 KB Output is correct
2 Correct 2 ms 584 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 32 ms 588 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 52 ms 844 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 327 ms 1784 KB Output isn't correct
2 Halted 0 ms 0 KB -