Submission #924765

#TimeUsernameProblemLanguageResultExecution timeMemory
924765parlimoosCity (BOI06_city)C++14
20 / 100
482 ms6744 KiB
//Be Name KHODA #pragma GCC optimize("Ofast") #include<bits/stdc++.h> using namespace std; using uint128 = unsigned __int128; typedef long long ll; typedef long double ld; #define pb push_back #define pp pop_back #define lb lower_bound #define ub upper_bound #define cl clear #define bg begin #define arr(x) array<ll , x> #define endl '\n' ll n , t; int k , m; vector<uint128> a; vector<int> lst; uint128 ps[20000]; uint128 dig[11]; void init(){ for(int i = 0 ; i < k ; i++){ ps[i] = a[i]; if(i > 0) ps[i] += ps[i - 1]; } ll cnt = 0; for(int i = 0 ; cnt < n ; i++) lst.pb((i + 1) * 4) , cnt += lst.back(); m = (int)lst.size(); for(int i = 0 ; i <= 10 ; i++) dig[i] = i; } bool jg(ll e){ ll cnt = 0; for(int i = 0 ; i < m ; i++){ ll inx = int(ub(a.bg() , a.end() , e) - a.bg()); cnt += inx * (1ll * i + 1ll * 1) * (1ll * 4); e -= t; } return (cnt > n); } ll bs(){ ll l = -1 , r = t * a.back(); while(r - l - 1 > 1){ ll c = l + (r - l - 1) / 2 + 1; if(jg(c)) r = c; else l = c - 1; } if(r - l - 1 == 1){ if(jg(r - 1)) return r - 1; } return r; } int main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> n >> t >> k; for(int i = 0 ; i < k ; i++){ ll d; cin >> d; a.pb(d); } init(); ll d = bs(); ll sec = d; uint128 o = 0; for(int i = 0 ; i < m ; i++){ uint128 ii = i; ll inx = int(lb(a.bg() , a.end() , sec) - a.bg()); if(inx == 0) continue; // cout << (1ll * i + 1ll * 1) * (1ll * 4) * (ps[inx - 1] + (t * (1ll * i))) << "$\n"; n -= inx * (1ll * i + 1ll * 1) * (1ll * 4); o += ((ii + dig[1]) * dig[4]) * (ps[inx - 1] + (t * ii)); sec -= t; } if(n > 0){ sec = d; for(int i = 0 ; n > 0 and i < m ; i++ , sec -= t){ uint128 ii = i; ll inx = int(lb(a.bg() , a.end() , sec) - a.bg()); if(inx >= k or a[inx] != sec) continue; uint128 dd = n; dd = min(dd , (ii + dig[1]) * dig[4]); o += dd * (a[inx] + (t * ii)); n -= min(n , (1ll * i + 1ll * 1) * (1ll * 4)); } } stack<int> oo; while(o > 0){ int d = o % dig[10]; oo.push(d); o /= dig[10]; } while(!oo.empty()){ cout << oo.top(); oo.pop(); } }

Compilation message (stderr)

city.cpp: In function 'int main()':
city.cpp:86:35: warning: comparison of integer expressions of different signedness: '__gnu_cxx::__alloc_traits<std::allocator<__int128 unsigned>, __int128 unsigned>::value_type' {aka '__int128 unsigned'} and 'll' {aka 'long long int'} [-Wsign-compare]
   86 |             if(inx >= k or a[inx] != sec) continue;
#Verdict Execution timeMemoryGrader output
Fetching results...