kmjp's blog

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

AtCoder ARC #014 : A - 君が望むなら世界中全てのたこ焼きを赤と青に染め上げよう、B - あの日したしりとりの結果を僕達はまだ知らない。

久々のARC参加。
今回はDが簡単だったようで、自分もなんとか解けた。
あいにくCでしょうもないWAを連発したため順位は微妙。
WAペナルティが少なかったので助かった。
今回はC以外はいつもより難易度控えめだね。
http://arc014.contest.atcoder.jp/tasks/arc014_1
http://arc014.contest.atcoder.jp/tasks/arc014_2

A - 君が望むなら世界中全てのたこ焼きを赤と青に染め上げよう

1列のたこ焼きが赤・青の順で塗られている。N番目のたこ焼きの色を答える。
2でmodを取るだけ。

void solve() {
	_P("%s\n",(GETi()%2)?"Red":"Blue");
	return;
}

B - あの日したしりとりの結果を僕達はまだ知らない。

アルファベットからなる単語でしりとりをしている。
しりとりのルールに則らない、すなわち以下のいずれかに違反すると負けである。

  • 先頭の文字が、前の単語の末尾の文字と一致しない
  • 前に出てきた単語を使う

しりとりの単語群が与えられるので、先手の勝敗を答える。

題意に沿ってやればよい。
「前に出てきた単語」はsetとか使えばよかったけど、単語数が少ないので律儀に比較した。

int N;
string W[101];

void solve() {
	int f,r,i,j,k,l;
	int bad[2];
	
	N=GETi();
	FOR(i,N) cin>>W[i];
	bad[0]=1000;
	bad[1]=1000;
	
	for(i=1;i<N;i++) {
		if(W[i][0]!=W[i-1][W[i-1].length()-1]) bad[i%2]=min(bad[i%2],i);
		FOR(j,i) {
			if(W[j]==W[i]) bad[i%2]=min(bad[i%2],i);
		}
	}
	
	if(bad[0]<bad[1]) _P("LOSE\n");
	else if(bad[0]>bad[1]) _P("WIN\n");
	else _P("DRAW\n");
	return;
}

まとめ

Aは過去でも一番簡単?
Bは文字列数と間違えてWの配列要素数をミスした。しょうもない…。