Submission #1041365

#TimeUsernameProblemLanguageResultExecution timeMemory
1041365vjudge1Packing Biscuits (IOI20_biscuits)C++17
42 / 100
1064 ms19792 KiB
#include "biscuits.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
map<ll,ll> dp,dp2;
int check(ll k,ll x,vector<ll>a){
    for(int i=0;i<60;i++){
        if(k&1ll<<i)
            a[i]-=x;
        if(a[i]<0)
            return 0;
        a[i+1]+=a[i]/2;
    }
    return 1;
}
ll count_tastiness(ll x, std::vector<ll> a) {
    while(a.size()<=60)
        a.push_back(0);
    if(x<=10000) {
        dp.clear();
        dp2.clear();
        dp[0]=1;
        ll ans=0;
        for(auto k:a){
            dp2.clear();
            for(auto[i,j]:dp){
                ll l=i+k;
                if(l>=x) dp2[(l-x)/2]+=j;
                dp2[l/2]+=j;
            }
            swap(dp,dp2); 
        }
        for(auto i:dp)
            ans+=i.second;
        return ans;
    } else {
        int ans=0;
        queue<pair<ll,int>> q;
        q.push({0,0});
        while(q.size()){
            auto[v,b]=q.front();
            q.pop();
            if(!check(v,x,a))continue;
            ans++;
            for(int i=b;i<60;i++)
                q.push({v|1ll<<i,i+1});
        }
        return ans;
    }
}

#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...