通常、原点から(x,y)への最短距離は複数個存在するので、途中の歩兵 *1 の存在は問題にならないが、|x| == |y| *2 となる場合のみ、最短距離は1通りしかなくなる。この時に、ルート上に歩兵がある場合のみ、迂回しなければならず、距離が+1される。
まとめると
場合のみ距離を+1する
コードの主要部分
int main(int argc, const char * argv[]){ int x, y, hx, hy; cin >> x >> y >> hx >> hy; int ans = max(x, y); if(abs(x) == abs(y) && abs(hx) == abs(hy) && abs(x) > abs(hx)){ if(x > 0 && y > 0 && hx > 0 && hy > 0){ ans++; }else if(x > 0 && y < 0 && hx > 0 && hy < 0){ ans++; }else if(x < 0 && y > 0 && hx < 0 && hy > 0){ ans++; }else if(x < 0 && y < 0 && hx < 0 && hy < 0){ ans++; } } cout << ans << endl; }
今回はわかりやすいように条件を細かく書いていますが、もっと簡単に書くこともできます。