在无限大的方格平面上,在十字路口左转代价为a,直行代价为b,右转不消耗代价,问从(0,0)到(x,y)的最小代价是多少。
不知道题解怎么想的,写得很复杂,实际上推一下把几个可能的距离取最小就好了。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a,b,x,y;int T;
ll calc(ll x, ll y){
x=abs(x);y=abs(y);
return min(min(min(x,y)*a+(x+y-min(x,y)*2)*b,((x+y)/2+abs(x-y)/2)*a+b*((x+y)&1)),(x+y)*b);
}
int main(){
scanf("%d",&T);
while (~scanf("%lld%lld%lld%lld",&a,&b,&x,&y))
printf("%lld\n",min(min(calc(x,y),calc(x,y+1)),min(calc(x-1,y),calc(x-1,y+1))));
return 0;
}