제출 #332223

#제출 시각아이디문제언어결과실행 시간메모리
332223Atill83Semiexpress (JOI17_semiexpress)C++14
100 / 100
9 ms492 KiB
#include <bits/stdc++.h> #define ff first #define ss second #define endl '\n' using namespace std; const long long INF = (long long) 1e18; const int mod = (int) 1e9+7; const int MAXN = (int) 3e5+5; typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> pll; ll n, m, k, A, B, C, T; ll s[MAXN]; ll tim[MAXN]; int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr);cout.tie(nullptr); #ifdef Local freopen("C:/Users/Admin/Desktop/Yazilim/C/IO/int.txt","r",stdin); freopen("C:/Users/Admin/Desktop/Yazilim/C/IO/out.txt","w",stdout); #endif cin>>n>>m>>k>>A>>B>>C>>T; multiset<pair<ll, pll>> st; ll ans = 0; for(int i = 0; i < m; i++){ cin>>s[i]; tim[i] = B * (s[i] - 1); if(tim[i] < T) ans += (i != 0); if(i && tim[i - 1] < T){ ll lmx = (T - tim[i - 1]) / A; ll len = s[i] - s[i - 1] - 1; //cerr<<lmx<<endl; if(lmx >= len){ ans += len; continue; } len -= lmx; ans += lmx; cerr<<lmx<<endl; ll val = min(len, (T - tim[i - 1] - (lmx + 1)*C) / A + 1); if(tim[i - 1] + (lmx + 1) * C > T) continue; st.insert({val, {len, tim[i - 1] + (lmx + 1) * C}}); } } //cerr<<ans<<endl; for(int i = 0; i < k - m && !st.empty(); i++){ auto u = prev(st.end()); auto cur = *u; //cerr<<cur.ff<<" "<<cur.ss.ff<<" "<<cur.ss.ss<<endl; ans += cur.ff; st.erase(u); ll len = cur.ss.ff, tm = cur.ss.ss; len -= cur.ff; if(!len) continue; ll val = min(len, (T - tm - C*cur.ff) / A + 1); if(val == 0 || tm + cur.ff * C > T) continue; st.insert({val, {len, tm + cur.ff * C}}); } cout<<ans<<endl; #ifdef Local cout<<endl<<fixed<<setprecision(2)<<1000.0 * clock() / CLOCKS_PER_SEC<< " milliseconds "; #endif }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...