제출 #303795

#제출 시각아이디문제언어결과실행 시간메모리
303795alex_velea비스킷 담기 (IOI20_biscuits)C++17
0 / 100
3 ms416 KiB
#include <vector> #include <iostream> #include <map> using namespace std; const int kMaxK = 127; typedef long long int64; typedef __int128_t int128; #define DEBUG if(0) long long count_tastiness(int64 x, std::vector<int64> a) { a.resize(kMaxK, 0); int128 target_carry = 0; int128 p = 1; for (int i = 0; i < (int)a.size(); i += 1) { target_carry += a[i] * p; p *= 2; } map<int128, int64> old = { {0, 1} }; int64 ans = 1; int128 global_carry = 0; p = 1; for (int i = 0; i < kMaxK; i += 1) { global_carry += a[i] * p; vector<pair<int128, int64>> new_additions; for (auto itr = old.rbegin(); itr != old.rend(); itr++) { int128 carry = itr->first; int64 num = itr->second; if (global_carry + carry >= x * p) { DEBUG cerr << "Add + for " << i << '\n'; ans += num; new_additions.emplace_back(carry - x * p, num); } } for (auto& itr : new_additions) { old[itr.first] += itr.second; } p *= 2; if (target_carry == global_carry) { break; } } 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...