제출 #1065725

#제출 시각아이디문제언어결과실행 시간메모리
1065725vjudge1비스킷 담기 (IOI20_biscuits)C++17
0 / 100
1 ms448 KiB
#include "biscuits.h"
#include <bits/stdc++.h>

using namespace std;

using ll = long long;
using vll = vector<ll>;
using i128 = __int128;

ll count_tastiness(ll x, vll a) {
    int n = int(a.size());
    vector<i128> S(n, 0);
    for(int i = 0; i < n; ++i) {
        S[i] = i128(1ll << i) * a[i];
        if(i) S[i] += S[i - 1];
    }
    vll C(n, 0);
    for(int i = 0; i < n; ++i) {
        S[i] /= x;
        if(S[i] >= i128(1ll << (i + 1)) - 1) C[i] = (1ll << (i + 1)) - 1;
        else C[i] = ll(S[i]);
    }
    vll F(n + 1, 0);
    F[0] = 1;

    function<ll(int, ll)> taie = [&](int k, ll lim) -> ll {
        if(lim < 0) return 0ll;
        if(lim >= (1ll << k) - 1) return F[k];
        //k > 0 de aici
        ll mij = (1ll << (k - 1)) - 1;
        if(lim <= mij) return taie(k - 1, lim);
        return taie(k - 1, lim - mij - 1) + F[k - 1];
    };
    for(int i = 1; i <= n; ++i) {
        //cout << C[i - 1] << " ";
        F[i] = F[i - 1] + taie(i - 1, C[i - 1] - (1ll << (i - 1)));
    }
//    cout << "\n";
//    for(auto it : F)
//        cout << it << " ";
//    cout << "\n";
	return F.back();
}

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