Submission #105837

#TimeUsernameProblemLanguageResultExecution timeMemory
105837Pro_ktmrLong Distance Coach (JOI17_coach)C++14
16 / 100
3 ms384 KiB
#include"bits/stdc++.h" using namespace std; #define int long long #define MP make_pair #define PB push_back int X,N,M,W,T,S[200005],D[200005],C[200005]; vector<pair<int,int> > v; int solve(int now, int state){ if(now == M){ int skip[9]; for(int i=0; i<M; i++) skip[i] = LLONG_MAX; for(int i=0; i<N; i++){ int start = lower_bound(D, D+M, S[i+1]%T) - D; if(start == M) start = 0; int idx = (M+start-1)%M; for(int j=0; j<M; j++){ if((state>>idx)%2 == 0) break; int now = (S[i+1]-D[idx])/T*T+D[idx]; //if(now <= S[i]) break; skip[idx] = min(skip[idx], now); idx = (M+idx-1)%M; } } int ans = 0; for(int i=0; i<M; i++){ //cout << skip[i] << endl; if(skip[i] == LLONG_MAX){ ans += ((X-D[i]-1)/T+1)*W; } else{ ans += C[i] + ( (skip[i]-D[i])/T )*W; } } //for(int i=0; i<M; i++) cout << (state>>i)%2; //cout << endl << ans << endl; return ans; } return min(solve(now+1, state), solve(now+1, state+(1<<now))); } signed main(){ cin >> X >> N >> M >> W >> T; if(N > 8 || M > 8) return -1; S[0] = -1; for(int i=0; i<N; i++) cin >> S[i+1]; S[N+1] = X; N++; for(int i=0; i<M; i++){ int D,C; cin >> D >> C; v.PB(MP(D,C)); } v.PB(MP(0, -1)); M++; sort(v.begin(), v.end()); for(int i=0; i<M; i++){ D[i] = v[i].first; C[i] = v[i].second; } // cout << solve(1,0) << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...