Submission #1269572

#TimeUsernameProblemLanguageResultExecution timeMemory
1269572biank비스킷 담기 (IOI20_biscuits)C++20
0 / 100
1141 ms1051028 KiB
#include "biscuits.h"
#include <bits/stdc++.h>

using namespace std;

#define forsn(i, s, n) for (int i = int(s); i < int(n); i++)
#define forn(i, n) forsn(i, 0, n)
#define dforsn(i, s, n) for (int i = int(n) - 1; i >= int(s); i--)
#define dforn(i, n) dforsn(i, 0, n)

#define all(x) begin(x), end(x)
#define sz(x) int(x.size())

#define pb push_back
#define eb emplace_back

using ll = long long;

ll solve(vector<ll> &a) {
    ll sum = 0;
    forn(i, sz(a)) sum += a[i] << i;
    return sum + 1;
}

ll count_tastiness(ll x, vector<ll> a) {
    if (x == 1) {
        forn(i, sz(a)) {
            ll extra = max(a[i] - 1, 0LL) / 2;
            a[i] -= 2 * extra;
            if (i + 1 == sz(a)) a.pb(0LL);
            a[i + 1] += extra;
        }
        ll ret = 1;
        vector<ll> c;
        forn(i, sz(a)) {
            if (c[i] == 0) {
                ret *= solve(c);
                c.clear();
            } else {
                c.pb(a[i]);
            }
        }
        ret *= solve(c);
        return ret;
    }
    ll sum = 0;
    forn(i, sz(a)) sum += a[i] << i;
    ll ret = 1;
    for (ll y = 1; y * x <= sum; y++) {
        vector<ll> c = a;
        ll need = x;
        while (need) {
            ll curr = y;
            dforn(i, sz(a)) {
                ll cnt = min(c[i], curr >> i);
                c[i] -= cnt, curr -= cnt << i;
            }
            if (curr == 0) need--;
            else break;
        }
        if (need == 0) ret++;
    }
    return ret;
}

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