kmjp's blog

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

Codeforces #200 Div1. B. Alternating Current

なかなか面白い問題。
また変数名を間違えて本番ミスした…。
http://codeforces.com/contest/343/problem/B

問題

  1. と-に相当する2本のひもがある。

左右に2つのひもの端が1つずつある。
途中、ひもの交わり方が文字列で与えられる。
これらのひもは両端を動かさずに互いに絡むことなくほどけるか答えよ。

解法

片方に絡まった回数と逆方向に絡まった回数をカウントし、両者が一致すればほどける。
どちらかの方向に絡まった回数が多ければ、ほどけない。

string S;

void solve() {
	int f,r,i,j,k,l, x,y;
	
	cin>>S;
	if(S.length() % 2) return (void)_P("No\n");
	i=0;
	FOR(x,S.size()) i+=((S[x]=='+') ^ ((x%2)==1))?1:-1;
	_P("%s\n",(i==0)?"Yes":"No");
}

まとめ

こういう簡単に解ける問題を、変数名ミスなどのしょぼいミスで落とすのはもったいない。