Submission #780888

# Submission time Handle Problem Language Result Execution time Memory
780888 2023-07-12T14:17:06 Z Elias Packing Biscuits (IOI20_biscuits) C++17
21 / 100
1000 ms 64664 KB
#ifndef _DEBUG
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#endif

#include <bits/stdc++.h>

using namespace std;

#define all(x) (x).begin(), (x).end()

#define int long long

#ifndef _DEBUG
#include "biscuits.h"
#endif

#ifdef _DEBUG

long long count_tastiness(long long x, std::vector<long long> a);

#endif

struct hash_pair
{
	template <class T1, class T2>
	size_t operator()(const pair<T1, T2> &p) const
	{
		auto hash1 = hash<T1>{}(p.first + 495739485798734ll);
		auto hash2 = hash<T2>{}(p.second);

		if (hash1 != hash2)
		{
			return hash1 ^ hash2;
		}

		// If hash1 == hash2, their XOR is zero.
		return hash1;
	}
};

int X;
vector<int> A;

unordered_map<pair<int, int>, int, hash_pair> mem;

int dp(int i, int carry)
{
	if (carry < 0)
		return 0;
	if (i >= 60 || (carry == 0 && i >= A.size()))
		return 1;

	if (mem.count({i, carry}))
		return mem[{i, carry}];

	int available_here = (i >= A.size() ? 0 : A[i]) + carry / 2;
	return mem[{i, carry}] = (dp(i + 1, available_here) + dp(i + 1, available_here - X));
}

long long count_tastiness(long long x, std::vector<long long> a)
{
	X = x;
	A = a;
	mem.clear();
	return dp(0, 0);
}

#ifdef _DEBUG

signed main()
{
	int q;
	assert(scanf("%lld", &q) == 1);
	vector<int> k(q);
	vector<long long> x(q);
	vector<vector<long long>> a(q);
	vector<long long> results(q);
	for (int t = 0; t < q; t++)
	{
		assert(scanf("%lld%lld", &k[t], &x[t]) == 2);
		a[t] = vector<long long>(k[t]);
		for (int i = 0; i < k[t]; i++)
		{
			assert(scanf("%lld", &a[t][i]) == 1);
		}
	}
	fclose(stdin);

	for (int t = 0; t < q; t++)
	{
		results[t] = count_tastiness(x[t], a[t]);
	}
	for (int t = 0; t < q; t++)
	{
		printf("%lld\n", results[t]);
	}
	fclose(stdout);
	return 0;
}

#endif

Compilation message

biscuits.cpp: In function 'long long int dp(long long int, long long int)':
biscuits.cpp:51:34: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |  if (i >= 60 || (carry == 0 && i >= A.size()))
      |                                ~~^~~~~~~~~~~
biscuits.cpp:57:26: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |  int available_here = (i >= A.size() ? 0 : A[i]) + carry / 2;
      |                        ~~^~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 2 ms 276 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 2 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 300 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 296 KB Output is correct
8 Correct 1 ms 304 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 323 ms 37376 KB Output is correct
2 Correct 447 ms 18684 KB Output is correct
3 Correct 930 ms 31532 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 296 KB Output is correct
6 Correct 1 ms 304 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Execution timed out 1106 ms 38240 KB Time limit exceeded
9 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1073 ms 64664 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 2 ms 276 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 2 ms 340 KB Output is correct
15 Correct 1 ms 300 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Correct 1 ms 212 KB Output is correct
21 Correct 1 ms 296 KB Output is correct
22 Correct 1 ms 304 KB Output is correct
23 Correct 1 ms 212 KB Output is correct
24 Correct 323 ms 37376 KB Output is correct
25 Correct 447 ms 18684 KB Output is correct
26 Correct 930 ms 31532 KB Output is correct
27 Correct 1 ms 340 KB Output is correct
28 Correct 1 ms 296 KB Output is correct
29 Correct 1 ms 304 KB Output is correct
30 Correct 1 ms 212 KB Output is correct
31 Execution timed out 1106 ms 38240 KB Time limit exceeded
32 Halted 0 ms 0 KB -