Submission #993540
Source Code Expand
/* -------------------------------- Template -------------------------------- */ #include <algorithm> #include <array> #include <bitset> #include <cassert> #include <cmath> #include <complex> #include <cstdio> #include <cstring> #include <deque> #include <functional> #include <iomanip> #include <locale> #include <iostream> #include <map> #include <memory> #include <new> #include <numeric> #include <queue> #include <random> #include <set> #include <sstream> #include <string> #include <tuple> #include <unordered_map> #include <unordered_set> #include <utility> #include <vector> #define REP(i,n) for(int i=0;i<(int)(n);i++) #define ALL(x) (x).begin(),(x).end() using ll = long long; using ld = long double; template <typename T> T &chmin(T &a, const T &b) { return a = std::min(a, b); } template <typename T> T &chmax(T &a, const T &b) { return a = std::max(a, b); } template<typename T> constexpr T inf = [](){ assert(false); }; // template<> constexpr int inf<int> = 1e9; // template<> constexpr ll inf<ll> = 1e18; // template<> constexpr ld inf<ld> = 1e30; struct yes_no : std::numpunct<char> { string_type do_truename() const { return "YES"; } string_type do_falsename() const { return "NO"; } }; void solve(); int main() { std::locale loc(std::locale(), new yes_no); std::cout << std::boolalpha << std::setprecision(12) << std::fixed; std::cout.imbue(loc); solve(); return 0; } using namespace std; /* -------------------------------- Library -------------------------------- */ template<class Data> struct ConvexHullTrick { deque<pair<Data, Data>> l; bool check(pair<Data, Data> l3) { const auto l1 = *prev(end(l), 2); const auto l2 = *prev(end(l), 1); Data a = (l2.first - l1.first) * (l3.second - l2.second); Data b = (l2.second - l1.second) * (l3.first - l2.first); return a >= b; } void add(Data a, Data b) { pair<Data, Data> n(a, b); while ((int)l.size() >= 2 && check(n)) l.pop_back(); l.emplace_back(n); } Data f(int k, Data x) { return l[k].first * x + l[k].second; } Data query(Data x){ while ((int)l.size() >= 2 && f(0, x) >= f(1, x)) l.pop_front(); return f(0, x); } }; // template<class Data> // struct ConvexHullTrick { // deque<pair<Data, Data>> l; // bool check(pair<Data, Data> l3) { // const auto l1 = *prev(end(l), 2); // const auto l2 = *prev(end(l), 1); // Data a = (l2.first - l1.first) * (l3.second - l2.second); // Data b = (l2.second - l1.second) * (l3.first - l2.first); // return a >= b; // } // void add(Data a, Data b) { // pair<Data, Data> n(a, b); // while ((int)l.size() >= 2 && check(n)) l.pop_back(); // l.emplace_back(n); // } // Data f(int k, Data x) { return l[k].first * x + l[k].second; } // pair<bool,Data> next(int x) { // if (l.size() <= 1) return make_pair(false, 0); // int b = l[1].second - l[0].second; // int a = l[0].first - l[1].first; // return make_pair(true, b / a); // } // Data query(Data x){ // while ((int)l.size() >= 2 && f(0, x) >= f(1, x)) l.pop_front(); // return f(0, x); // } // }; /* ---------------------------------- Main ---------------------------------- */ ll dp[2000005]; void solve() { ll N, A; cin >> N >> A; ConvexHullTrick<__int128> st; st.add(-1, 0); int sa = 0; REP(i,min(N,2000000LL)) { sa = i; dp[i] = st.query(i); if (dp[i] <= -N) { cout << i << endl; return; } // cout << -dp[i] << endl; ll a = dp[i]; ll b = (i + A) * -a; if (b > 1e18) break; st.add(a, b); } // cout << "OK" << endl; ll lb = sa, ub = N + 1; while (ub > lb + 1) { ConvexHullTrick<__int128> nst = st; ll mid = (lb + ub) / 2; // cout << mid << endl; // cout << ll(nst.query(mid)) << endl; if (nst.query(mid) <= -N) ub = mid; else { lb = mid; st = move(nst); } } cout << ub << endl; return; }
Submission Info
Submission Time | |
---|---|
Task | E - Cookies |
User | asi1024 |
Language | C++14 (GCC 5.4.1) |
Score | 500 |
Code Size | 4039 Byte |
Status | TLE |
Exec Time | 2107 ms |
Memory | 146600 KB |
Judge Result
Set Name | sample | dataset1 | dataset2 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 500 / 500 | 0 / 500 | ||||||||
Status |
|
|
|
Set Name | Test Cases |
---|---|
sample | sample-01.txt, sample-02.txt, sample-03.txt |
dataset1 | sample-01.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt |
dataset2 | sample-01.txt, sample-02.txt, sample-03.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 02-11.txt, 02-12.txt, 02-13.txt, 02-14.txt, 02-15.txt, 02-16.txt, 02-17.txt, 02-18.txt, 02-19.txt, 02-20.txt, 02-21.txt, 02-22.txt, 02-23.txt, 02-24.txt, 02-25.txt, 02-26.txt, 02-27.txt, 02-28.txt, 02-29.txt, 02-30.txt, 02-31.txt, 02-32.txt, 02-33.txt, 02-34.txt, 02-35.txt, 02-36.txt, 02-37.txt, 02-38.txt, 02-39.txt, 02-40.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
01-01.txt | AC | 2 ms | 256 KB |
01-02.txt | AC | 2 ms | 256 KB |
01-03.txt | AC | 2 ms | 256 KB |
01-04.txt | AC | 2 ms | 256 KB |
01-05.txt | AC | 2 ms | 256 KB |
01-06.txt | AC | 2 ms | 256 KB |
01-07.txt | AC | 2 ms | 256 KB |
01-08.txt | AC | 2 ms | 256 KB |
01-09.txt | AC | 2 ms | 256 KB |
01-10.txt | AC | 2 ms | 256 KB |
01-11.txt | AC | 2 ms | 256 KB |
01-12.txt | AC | 68 ms | 40708 KB |
01-13.txt | AC | 108 ms | 73476 KB |
01-14.txt | AC | 2 ms | 256 KB |
01-15.txt | AC | 2 ms | 256 KB |
01-16.txt | AC | 2 ms | 256 KB |
01-17.txt | AC | 2 ms | 256 KB |
01-18.txt | AC | 2 ms | 256 KB |
01-19.txt | AC | 2 ms | 256 KB |
01-20.txt | AC | 2 ms | 256 KB |
01-21.txt | AC | 2 ms | 256 KB |
01-22.txt | AC | 2 ms | 256 KB |
01-23.txt | AC | 2 ms | 256 KB |
01-24.txt | AC | 2 ms | 256 KB |
01-25.txt | AC | 2 ms | 256 KB |
01-26.txt | AC | 2 ms | 256 KB |
02-01.txt | AC | 2 ms | 256 KB |
02-02.txt | AC | 2 ms | 256 KB |
02-03.txt | AC | 2 ms | 256 KB |
02-04.txt | AC | 2 ms | 256 KB |
02-05.txt | AC | 2 ms | 256 KB |
02-06.txt | AC | 2 ms | 256 KB |
02-07.txt | AC | 2 ms | 256 KB |
02-08.txt | AC | 2 ms | 256 KB |
02-09.txt | AC | 2 ms | 256 KB |
02-10.txt | AC | 2 ms | 256 KB |
02-11.txt | AC | 2 ms | 256 KB |
02-12.txt | AC | 2 ms | 256 KB |
02-13.txt | AC | 2 ms | 256 KB |
02-14.txt | AC | 2 ms | 256 KB |
02-15.txt | AC | 2 ms | 256 KB |
02-16.txt | AC | 2 ms | 256 KB |
02-17.txt | AC | 2 ms | 256 KB |
02-18.txt | AC | 2 ms | 256 KB |
02-19.txt | AC | 2 ms | 256 KB |
02-20.txt | AC | 3 ms | 384 KB |
02-21.txt | AC | 7 ms | 1780 KB |
02-22.txt | AC | 998 ms | 81508 KB |
02-23.txt | AC | 32 ms | 8064 KB |
02-24.txt | AC | 32 ms | 8064 KB |
02-25.txt | AC | 2 ms | 256 KB |
02-26.txt | AC | 2 ms | 256 KB |
02-27.txt | AC | 2 ms | 256 KB |
02-28.txt | AC | 2 ms | 256 KB |
02-29.txt | AC | 2 ms | 256 KB |
02-30.txt | AC | 2 ms | 256 KB |
02-31.txt | AC | 2 ms | 256 KB |
02-32.txt | AC | 2 ms | 256 KB |
02-33.txt | AC | 2 ms | 256 KB |
02-34.txt | AC | 2 ms | 256 KB |
02-35.txt | AC | 2 ms | 256 KB |
02-36.txt | AC | 2 ms | 256 KB |
02-37.txt | AC | 2 ms | 256 KB |
02-38.txt | AC | 3 ms | 512 KB |
02-39.txt | AC | 839 ms | 54088 KB |
02-40.txt | TLE | 2107 ms | 146600 KB |
sample-01.txt | AC | 2 ms | 256 KB |
sample-02.txt | AC | 32 ms | 8064 KB |
sample-03.txt | AC | 2 ms | 256 KB |