Submission #1225982

#TimeUsernameProblemLanguageResultExecution timeMemory
1225982PVM_pvmPacking Biscuits (IOI20_biscuits)C++20
42 / 100
1098 ms49992 KiB
#include "biscuits.h"
#include<bits/stdc++.h>
using namespace std;
#define MAXK 60
unordered_map<long long, long long> un[MAXK];
long long xx;
vector<long long> ms(MAXK);
long long f(int bit, long long klk)
{
    if (bit==MAXK-1)
    {
        if (klk>=xx) return 2;
        return 1;
    }
    auto tyrs=un[bit].find(klk);
    if (tyrs!=un[bit].end()) {
        //cout<<tyrs->first<<" "<<tyrs->second<<" "<<klk<<"\n";
            return tyrs->second;}
    if (klk<xx)
    {
        long long cur=f(bit+1,ms[bit+1]+(klk/2));
        un[bit][klk]=cur;
        return cur;
    }
    long long cur=f(bit+1,ms[bit+1]+(klk/2))+f(bit+1,ms[bit+1]+((klk-xx)/2));
    un[bit][klk]=cur;
    //cout<<bit<<" "<<klk<<" "<<cur<<"\n";
    return cur;
}

long long count_tastiness(long long x, vector<long long> a) {
    for (int q=0;q<MAXK;q++) ms[q]=0;
    for (int q=0;q<a.size();q++) ms[q]=a[q];
	xx=x;
	for (int q=0;q<MAXK;q++) un[q].clear();
	return f(0,a[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...