제출 #1222180

#제출 시각아이디문제언어결과실행 시간메모리
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...