This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define X first
#define Y second
int H;int W;
int A;int B;int C;
int n;
pair<int,int>ar[200005];
int kick(int x,int y){
return B+A*abs(x-y);
}
int walk(int x,int y){
return C*abs(x-y);
}
signed main(){
cin>>H>>W;
cin>>A>>B>>C;
cin>>n;
for(int i=1;i<=n;i++){
cin>>ar[i].first>>ar[i].second;
}
int ans;
if(ar[1].first==ar[n].first){
ans=B+A*abs(ar[1].second-ar[n].second);
ans=min(ans,C*abs(ar[1].second-ar[n].second));
cout<<ans<<endl;return 0;
}
if(ar[1].second==ar[n].second){
ans=B+A*abs(ar[1].first-ar[n].first);
ans=min(ans,C*abs(ar[1].first-ar[n].first));
cout<<ans<<endl;return 0;
}
ans=1e18;
ans=min(ans,kick(ar[1].X,ar[n].X)+walk(ar[1].Y,ar[n].Y)*2ll);
ans=min(ans,kick(ar[1].X,ar[n].X)+walk(ar[1].Y,ar[n].Y)+kick(ar[1].Y,ar[n].Y));
ans=min(ans,walk(ar[1].X,ar[n].X)+walk(ar[1].Y,ar[n].Y));
ans=min(ans,walk(ar[1].X,ar[n].X)+kick(ar[1].Y,ar[n].Y));
swap(ar[1].first,ar[1].second);
swap(ar[2].first,ar[2].second);
ans=min(ans,kick(ar[1].X,ar[n].X)+walk(ar[1].Y,ar[n].Y)*2ll);
ans=min(ans,kick(ar[1].X,ar[n].X)+walk(ar[1].Y,ar[n].Y)+kick(ar[1].Y,ar[n].Y));
ans=min(ans,walk(ar[1].X,ar[n].X)+walk(ar[1].Y,ar[n].Y));
ans=min(ans,walk(ar[1].X,ar[n].X)+kick(ar[1].Y,ar[n].Y));
cout<<ans<<endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |