Submission #769738

#TimeUsernameProblemLanguageResultExecution timeMemory
769738boris_mihovPacking Biscuits (IOI20_biscuits)C++17
21 / 100
1088 ms52880 KiB
#include "biscuits.h"
#include <algorithm>
#include <iostream>
#include <numeric>
#include <cassert>
#include <vector>
#include <map>

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

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

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

    if (mem.count({pos, 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.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...