Submission #825393

#TimeUsernameProblemLanguageResultExecution timeMemory
825393LoboPacking Biscuits (IOI20_biscuits)C++17
42 / 100
66 ms20516 KiB
#include "biscuits.h"
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define mp make_pair
#define fr first
#define sc second

int x;
vector<int> a;
vector<vector<int>> dp;

int sol(int i, int q) {
	if(dp[i][q] != -1) return dp[i][q];

	assert(0 <= q && q <= 2*x);

	// cout << i << " " << q << " " << a[i] << endl;

	if(i == 60) return dp[i][q] = 1;
	dp[i][q] = sol(i+1,(q+a[i])/2);
	if(q+a[i] >= x) dp[i][q]+= sol(i+1,(q+a[i]-x)/2);
	return dp[i][q];
}

long long count_tastiness(long long X, std::vector<long long> A) {
	x = X;
	a.clear(); a.resize(61,0);
	for(int i = 0; i < A.size(); i++) a[i] = A[i];
	dp.clear(); dp.resize(61,vector<int>((int) 2e4+10,-1));

	for(int i = 0; i < 60; i++) {
		if(a[i] > x+1) {
			int dif = a[i]-x;
			if(dif%2 == 1) dif--;
			a[i]-= dif;
			a[i+1]+= dif/2;
		}
	}
	return sol(0,0);
}

Compilation message (stderr)

biscuits.cpp: In function 'long long int count_tastiness(long long int, std::vector<long long int>)':
biscuits.cpp:30:19: 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]
   30 |  for(int i = 0; i < A.size(); i++) a[i] = A[i];
      |                 ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...