Submission #356834

#TimeUsernameProblemLanguageResultExecution timeMemory
356834KerimPacking Biscuits (IOI20_biscuits)C++17
42 / 100
147 ms97396 KiB
#include "biscuits.h"
#include "bits/stdc++.h"
#define MAXN 100009
#define INF 1000000007
#define mp(x,y) make_pair(x,y)
#define all(v) v.begin(),v.end()
#define pb(x) push_back(x)
#define wr cout<<"----------------"<<endl;
#define ppb() pop_back()
#define tr(ii,c) for(__typeof((c).begin()) ii=(c).begin();ii!=(c).end();ii++)
#define ff first
#define ss second
#define my_little_dodge 46
#define debug(x)  cerr<< #x <<" = "<< x<<endl;
using namespace std;

typedef long long ll;
typedef pair<int,int> PII;
template<class T>bool umin(T& a,T b){if(a>b){a=b;return 1;}return 0;}
template<class T>bool umax(T& a,T b){if(a<b){a=b;return 1;}return 0;}
ll X,dp[61][MAXN];
vector<ll>a;
ll rec(int pos,int cur){
	assert(cur<2*X);
	if(pos==61)return 1;
	ll &ret=dp[pos][cur];
	if(~ret)return ret;
	ret=rec(pos+1,(cur+a[pos])/2);
	if(a[pos]+cur>=X)ret+=rec(pos+1,(a[pos]+cur-X)/2);
	return ret;
}
long long count_tastiness(long long x, vector<long long> A) {
	X=x;a=A;
	while(int(a.size())<61)a.pb(0);
	for(int i=0;i<60;i++)
		if(a[i]>x){
			ll tmp=(a[i]-x)/2;
			a[i+1]+=tmp;
			a[i]-=tmp<<1;	
		}
	memset(dp,-1,sizeof dp);
	return rec(0,0);
}
#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...