제출 #360553

#제출 시각아이디문제언어결과실행 시간메모리
360553juggernaut비스킷 담기 (IOI20_biscuits)C++14
77 / 100
290 ms1440 KiB
#include"biscuits.h"
#ifndef EVAL
#include"grader.cpp"
#endif
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll x;
map<ll,ll>dp[61];
vector<ll>a;
ll rec(int pos,int cur){
	if(pos==61)return 1ll;
	auto it=dp[pos].lower_bound(cur);
    if(it!=dp[pos].end()){
        if(it->first==cur)return it->second;
        auto itt=it;
        if(itt!=dp[pos].begin()){
            itt--;
            if(itt->second==it->second)return it->second;
        }
    }
    dp[pos][cur]=rec(pos+1,(cur+a[pos])>>1);
    if(a[pos]+cur>=x)dp[pos][cur]+=rec(pos+1,(a[pos]+cur-x)>>1);
	return dp[pos][cur];
}
ll count_tastiness(ll X,vector<ll>A){
	a=A;x=X;
	a.resize(61);
	for(int i=0;i<61;i++)dp[i].clear();
	for(int i=0;i<60;i++)
		if(a[i]>x){
			ll tmp=(a[i]-x)>>1ll;
			a[i+1]+=tmp;
			a[i]-=(tmp<<1ll);
		}
	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...