Submission #1222180

#TimeUsernameProblemLanguageResultExecution timeMemory
1222180just비스킷 담기 (IOI20_biscuits)C++20
12 / 100
1 ms328 KiB
#include "biscuits.h"

#include "bits/stdc++.h"
using namespace std;

#define vec vector
#define int long long
#define all(x) (x).begin(), (x).end()

const int BITS = 64;


vec<vec<int>> split(const vec<int> &a, int k) {
    vec<vec<int>> splits = {{}};
    for (int x: a) {
        if (x == k) splits.push_back({});
        else splits.back().push_back(x);
    }
    
    vec<vec<int>> tmp;
    for (auto x: splits) if (x.size()) tmp.push_back(x);
    return tmp;
}

template<typename T>
void print(T x) {
    cerr << x << " ";
}

template<typename T>
void print(vec<T> a) {
    for (T x: a) print(x);
    cerr << endl;
}



int just_pow(int k) {
    int x = 1;
    while (k--) x *= 2;
    return x;
}

int count_tastiness(int x, vec<int> a) {
    assert(x == 1);
    
    while (a.size() < BITS) a.push_back(0);
    
    for (int i = 0; i < BITS - 1; i++) {
        if (a[i] % 2 == 1) a[i + 1] += a[i] / 2, a[i] = 1;
        else if (a[i] >= 2) a[i + 1] += ((a[i] - 2) / 2), a[i] = 2;
    }
    
    
    int ans = 1;
    
    auto splits = split(a, 0);
    for (auto s: splits) {
        // print(s);
        if (count(all(s), 2) == 0) {
            ans *= just_pow(s.size());
            continue;
        }
        
        
        int tmp = just_pow(s.size());
        for (int i = 0; i < s.size(); i++) {
            if (s[i] == 2) {
                tmp += just_pow(i);
            }
        }
        
        ans *= tmp;
    }
    
    
    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...