Submission #769740

#TimeUsernameProblemLanguageResultExecution timeMemory
769740boris_mihovPacking Biscuits (IOI20_biscuits)C++17
42 / 100
1077 ms38224 KiB
#include "biscuits.h"
#include <unordered_map>
#include <algorithm>
#include <iostream>
#include <numeric>
#include <cassert>
#include <vector>

typedef long long llong;
const int MAXN = 64;
const int INF = 1e9;

int n;
llong x;
llong a[MAXN];
std::unordered_map <llong, llong> mem[MAXN];

llong rec(int pos, llong prenos)
{
    if (pos == n)
    {
        return prenos / x + 1;
    }

    if (mem[pos].count(prenos))
    {
        return mem[pos][prenos];
    }

    llong ans = 0;
    llong curr = a[pos] + prenos;
    if (curr >= x) ans += rec(pos + 1, (curr - x) / 2);
    ans += rec(pos + 1, curr / 2);
    return mem[pos][prenos] = ans;
}

llong count_tastiness(llong X, std::vector <llong> A)
{
    n = A.size();
    x = X;

    for (int i = 0 ; i < n ; ++i)
    {
        a[i] = A[i];
        mem[i].clear();
    }

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