kmjp's blog

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

Codeforces #869 : Div1 D. Toy Machine

これまた解が短い。
https://codeforces.com/contest/1817/problem/D

問題

奇数Nが与えられる。
2*Nのグリッドが与えられる。
(1,0),(1,N/2),(1,N-1)は固定マスであり、(1,1)-(1,N-2)には動く四角いコマが載っている。
グリッドを上下左右に傾けると、コマがその方向に動く。

K番目のコマを左上マスに持っていく手順を求めよ。

解法

KがN/2以上かどうかで処理を変える。
"RDLU"や"LDRULU"を繰り返すと、左半分または右半分をrotateできるので、これをうまく使っていこう。

ll N,K;

void solve() {
	int i,j,k,l,r,x,y; string s;
	
	cin>>N>>K;
	string R;
	if(K<N/2) {
		hoge:
		while(K>1) {
			R+="LDRULU";
			K--;
		}
		R+="L";
	}
	else if(K==N/2) {
		R+="DL";
	}
	else {
		while(K<N-2) {
			R+="RDLU";
			K++;
		}
		FOR(i,N) R+="LDLU";
		R+="RDL";
	}
	
	
	cout<<R<<endl;
	
	
}

まとめ

考察メインの問題。