kmjp's blog

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

Google Code Jam 2019 Qualification Round : A. Foregone Solution, B. You Can Go Your Own Way

UIコロコロ変えるの止めてくれない?
https://codingcompetitions.withgoogle.com/codejam/round/0000000000051705

A: Foregone Solution

4を含む桁のある整数Nが与えられる。
4を含む桁のない2つの正整数A,BのうちA+B=Nと表せるものを1組作れ。

基本的に初期値としてA=Nとし、4を含む桁があればそこだけ2にして、その分Bのある桁に2を加えよう。
最後にBのLeading Zeroを削除する。
Nは4を含む桁があるので、Bが0になることはない。

string N,A,B;

void solve(int _loop) {
	int f,i,j,k,l,x,y;
	
	cin>>N;
	A=B=N;
	FOR(i,N.size()) {
		if(A[i]!='4') {
			B[i]='0';
		}
		else {
			A[i]='2';
			B[i]='2';
		}
	}
	reverse(ALL(B));
	while(B.back()=='0') B.pop_back();
	reverse(ALL(B));
	
	
	_P("Case #%d: %s %s\n",_loop,A.c_str(),B.c_str());
}

B: You Can Go Your Own Way

正方形状の2次元グリッド上で、左上セルから右下セルに、右または下の隣接セルを辿って移動することを考える。
ここで、1つそのような移動経路が与えられる。
同じセルは通ってもよいが、同じ隣接セル間を辿らないような別の経路を1つ示せ。

対角線に対象な経路を選べば条件を満たすので、入力の右と下を入れ替えよう。

int N;
string S;

void solve(int _loop) {
	int f,i,j,k,l,x,y;
	
	cin>>N>>S;
	FORR(c,S) {
		if(c=='E') c='S';
		else c='E';
	}
	
	_P("Case #%d: %s\n",_loop,S.c_str());
}

まとめ

最近はやりの妙に要素がでかかったり配置がスパースなサイト好きじゃないんだよね…。
順位表の一覧性とか低すぎるし。
スマホとか画面が小さいデバイスならまだしも、GCJは大概ディスプレイで見るだろうに。