Submission #82568

# Submission time Handle Problem Language Result Execution time Memory
82568 2018-10-31T13:39:50 Z luciocf San (COCI17_san) C++14
24 / 120
379 ms 1820 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];

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;

	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());

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

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

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

			soma += (ll) num[i].second;
			atual = num[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";
}
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 372 KB Output is correct
2 Correct 2 ms 448 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 35 ms 600 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 52 ms 852 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 379 ms 1820 KB Output isn't correct
2 Halted 0 ms 0 KB -