제출 #394830

#제출 시각아이디문제언어결과실행 시간메모리
394830snasibov05Packing Biscuits (IOI20_biscuits)C++14
0 / 100
1083 ms332 KiB
#include "biscuits.h"

#define int long long

using namespace std;

const int kmax = 65;
const int ymax = 1e5;

vector<int> getBinary(int n){
    vector<int> bin(kmax);
    int k = 0;
    while (n > 0){
        if (n % 2) bin[k] = 1;
        k++;
        n /= 2;
    }
    return bin;
}

bool possible(int x, int y, vector<int> avail){
    vector<int> bin = getBinary(y);

    for (int i = kmax-1; i >= 0; --i) {
        if (avail[i] < bin[i] * x) {
            if (i != 0) bin[i-1] += bin[i] * 2, avail[i-1] += avail[i] * 2;
            continue;
        }
        avail[i] -= bin[i] * x;
        bin[i] = 0;
        if (i != 0 && (2 << i) <= x) avail[i-1] += avail[i] * 2;
    }

    return bin[0] == 0;
}

int count_tastiness(int x, vector<int> a) {
    int ans = 0;

    vector<int> avail(kmax);
    for (int i = a.size()-1; i >= 0; --i) {
        avail[i] = a[i];
    }

    for (int i = 0; i <= ymax; ++i) {
        if (possible(x, i, avail)) ans++;
    }

	return ans;
}

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