kmjp's blog

競技プログラミング参加記です

Google Code Jam 2020 Round 1C : A. Overexcited Fan

今回も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問目に妙に簡単な問題出すよね。