今回もC問題は歯ごたえがあるね。
https://codingcompetitions.withgoogle.com/codejam/round/000000000019fef4/0000000000317409
問題
2次元座標上で、ロボットの初期位置と、その後の移動経路が与えられる。
プレイヤーは時間1で上下左右に1移動できる。もしくはその場にとどまることができる。
ロボットが移動を終える前に、できるだけ早くプレイヤーとロボットが同じ座標になるようにプレイヤーを移動させると、その時間はいつか。
解法
時間t後のロボットの位置がXt、Ytなら、|Xt|+|Yt|≦tならプレイヤーはその位置に到達できる。
あとはtを小さい順に総当たりしよう。
int N; int X,Y; string S; void solve(int _loop) { int f,i,j,k,l,x,y; cin>>X>>Y>>S; FOR(i,S.size()) { if(S[i]=='E') X++; if(S[i]=='W') X--; if(S[i]=='N') Y++; if(S[i]=='S') Y--; if(abs(X)+abs(Y)<=i+1) { _P("Case #%d: %d\n",_loop,i+1); return; } } _P("Case #%d: IMPOSSIBLE\n",_loop); }
まとめ
GCJは時々1問目に妙に簡単な問題出すよね。