Submission #749089

#TimeUsernameProblemLanguageResultExecution timeMemory
749089DJeniUpPacking Biscuits (IOI20_biscuits)C++17
0 / 100
14 ms11220 KiB
#include "biscuits.h"
#include "bits/stdc++.h"
#pragma GCC optimize("O3")
 
using namespace std;
 
typedef long long ll;
 
ll m[67][10007];
ll k,n,d[67],f[67];
 
ll S(ll x,ll y){
    if(x>=60 && y<n)return 1;
    y+=d[x];
    if(y/n<1)return S(x+1,y/2+f[x]*(y%2==1));
    //cout<<"! "<<x<<" "<<y<<endl;
    if(m[x][y]!=0)return m[x][y];
    m[x][y]+=S(x+1,y/2+f[x]*(y%2==1));
    if(y>=n)m[x][y]+=S(x+1,(y-n)/2+f[x]*((y-n)%2==1));
    //cout<<x<<" "<<y<<" "<<m[x][y]<<endl;
    return m[x][y];
}
 
long long count_tastiness(long long x, std::vector<long long> a) {
    k=a.size();
    n=x;
    for(int i=0;i<=65;i++){
        for(int j=0;j<=x;j++)m[i][j]=0;
        d[i]=0;
        f[i]=0;
    }
    for(int i=0;i<k;i++){
        d[i]+=a[i];
        
    }
    for(int i=0;i<=60;i++){
        if(d[i]>n){
            if((d[i]-n)%2==0){
                d[i+1]+=(d[i]-n)/2;
                d[i]=n;
            }else{
                f[i]=1;
                d[i+1]+=(d[i]-n)/2;
                d[i]=n;
            }
        }
    }
    //cout<<"! "<<S(0,0)<<endl;
    return S(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...