제출 #1356768

#제출 시각아이디문제언어결과실행 시간메모리
1356768Sacharlemagne비스킷 담기 (IOI20_biscuits)C++20
9 / 100
1096 ms420 KiB
#include "biscuits.h"

using namespace std;

typedef long long ll;
typedef vector<ll> vll;
ll ans = 0;
void backtrack(int ind, ll x, vll &a, vll &max_after) {
    if (ind == a.size()-1 && max(a[ind], max_after[ind]) < x) return;
    if (a[ind] >= x) {
        ++ans;
        // i must be x
        ll ad = (a[ind]-x)/2;
        if (a.size() == ind+1) a.push_back(0);
        a[ind+1] += ad;
        backtrack(ind+1, x, a, max_after);
        a[ind+1] -= ad;
        if (a.size() == ind+2 && !a[ind+1]) a.pop_back();
    }
    if (a.size() == ind+1) a.push_back(0);
    a[ind+1] += a[ind]/2;
    backtrack(ind+1, x, a, max_after);
    a[ind+1] -= a[ind]/2;
    if (a.size() == ind+2 && !a[ind+1]) a.pop_back();
}

ll count_tastiness(ll x, vll a) {
    while (!a.back()) a.pop_back();
    if (a.empty()) return 1;
    ans = 0;
    vll max_after(a.size()+1);
    for (int i = a.size()-1; i >= 0; --i) max_after[i] = max(max_after[i+1], a[i]);
    backtrack(0, x, a, max_after);
    return ans + 1;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…