なんとか全完。
https://www.hackerrank.com/contests/unkoder-08/challenges/kunekune
問題
初期状態でプレイヤーは原点にいる。
奇数回目の移動ではX座標を正か負に1、偶数回目の移動ではY座標を正か負に1加えた座標に移動できる。
点(X,Y)に到達するまでの最小移動回数を求めよ。
解法
X,Yの正負は関係ないので、ともに非負になるよう符号を反転しておく。
まず、(min(X,Y),min(X,Y))まで2*min(X,Y)手掛けて移動する。
残りの必要移動量は、X座標かY座標が0である。
- X座標に必要移動量が残っている場合
- 以下の順で右に移動していけばいいので、(X*2-(X%2))手かかる。
03478... 12569.
- Y座標に必要移動量が残っている場合
- 以下の順で上に移動していけばいいので、Y*2+(Y%2)手かかる。
.. 98 67 54 23 10
ll X,Y; void solve() { int i,j,k,l,r,x,y; string s; cin>>X>>Y; X=abs(X); Y=abs(Y); ll Z=min(X,Y); X-=Z; Y-=Z; ll ret=2*Z; if(X>0) ret += X*2-(X%2); else if(Y>0) ret+=Y*2+(Y%2); cout<<ret<<endl; }
まとめ
yukicoderだとちょっと難しい★1位?