제출 #837244

#제출 시각아이디문제언어결과실행 시간메모리
837244_martynasSoccer (JOI17_soccer)C++11
35 / 100
6 ms340 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int mxn = 1e5+5; const ll inf = 1e17; int h, w, n; ll A, B, C; ll s[mxn], t[mxn]; int main(int argc, char const *argv[]) { cin >> h >> w >> A >> B >> C; cin >> n; for(int i = 0; i < n; i++) cin >> s[i] >> t[i]; if(C <= A) { cout << C*(labs(s[0]-s[n-1])+labs(t[0]-t[n-1])) << "\n"; return 0; } if(n == 2) { cout << min(C*(labs(s[0]-s[n-1])+labs(t[0]-t[n-1])), C*min(labs(s[0]-s[n-1]), labs(t[0]-t[n-1]))+A*max(labs(s[0]-s[n-1]), labs(t[0]-t[n-1]))+B) << "\n"; } else if(A == 0) { vector<ll> dist(n, inf); vector<bool> visited(n); dist[0] = 0; for(int k = 0; k < n-1; k++) { int mni = -1; for(int i = 0; i < n; i++) if(!visited[i]) { if(mni == -1 || dist[i] < dist[mni]) mni = i; } visited[mni] = true; for(int i = 0; i < n; i++) { dist[i] = min(dist[i], dist[mni]+min(C*(labs(s[mni]-s[i])+labs(t[mni]-t[i])), C*min(labs(s[mni]-s[i]), labs(t[mni]-t[i]))+B)); } } cout << dist[n-1] << "\n"; } else { cout << "0\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...