Submission #431785

#TimeUsernameProblemLanguageResultExecution timeMemory
431785lycLong Distance Coach (JOI17_coach)C++14
0 / 100
1 ms332 KiB
#include <bits/stdc++.h> using namespace std; #define TRACE(x) cerr << #x << " :: " << x << endl #define _ << " " << #define SZ(x) ((int)(x).size()) #define ALL(x) (x).begin(),(x).end() #define FOR(i,a,b) for(int i=(a);i<=(b);++i) #define RFOR(i,a,b) for(int i=(a);i>=(b);--i) typedef long long ll; typedef pair<ll,ll> pll; const int mxN = 2e5+5; const int mxM = 2e5+5; ll X, T, S[mxN]; int N, M, W; pll cus[mxM]; int fst[mxN], lst[mxN]; ll base, dp[mxM]; bool dead[9]; ll cntless(ll a, ll b) { return b > a ? 0 : (a-b+T-1)/T; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> X >> N >> M >> W >> T; FOR(i,1,N) cin >> S[i]; S[0] = 1; S[N+1] = X; FOR(i,1,M){ ll D, C; cin >> D >> C; cus[i] = pll(D,C); } ll ans = LLONG_MAX; FOR(i,0,(1<<M)-1){ ll cur = W; memset(dead,0,sizeof dead); FOR(j,0,N){ ll die = T; cur += (S[j+1]/T - S[j]/T) * W; FOR(k,1,M) if (!dead[k]) { if ((i&(1<<(k-1))) == 0) { die = min(die,cus[k].first); } cur += (cntless(S[j+1],cus[k].first) - cntless(S[j],cus[k].first)) * W; } FOR(k,1,M) if (!dead[k] && cus[k].first >= die && cus[k].first < S[j+1]%T) { dead[k] = 1; cur += cus[k].second; cur -= W; } } ans = min(ans,cur); } cout << ans << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...