Codeforces Round #310 (Div. 2)
はい。
http://codeforces.com/contest/556
A. Case of the Zeros and Ones
ざっくりと大意
・10か01を取り除いてつながった箇所が10,01ならまた除いて最後に何文字残るか?
方針のようなもの
・全部消すのをシミュレートするには文字が長すぎるのでなんとかする。
n=int(raw_input()) w=raw_input() chk=w.count('0') print n-2*min(chk,n-chk)
0,1の少ない方の個数の分だけ2つくっついて消えていくものらしい。なのでn-2・min()で計算。 確かに0,1が互いに接すること無く両方残ることはあり得ず、最終形は0か1のどちらかだけの文字列になっているはずなのでそうなのかもしれない。
B. Case of Fake Numbers
ざっくりと大意
・それぞれn個の歯を持つ歯車が0番目からn-1番目まで並んでいる。
・0番は時計回りに、1番は反時計回りに、2番は時計回りに....動いて時計回りのものは加算で反時計回りのものは減算される。n-1から0でループする。
・歯車が回っている間に0,1,2...n-1という昇順の数列になることがあり得るか???
方針のようなもの
・1000ならそんなに大きくない数な気がするのでシミュレートで。
def sol(): n=int(raw_input()) l=map(int,raw_input().split()) chk=range(n) e=0 while e<n: e+=1 cnt=0 while cnt<n: if cnt%2: l[cnt]-=1 else: l[cnt]+=1 if l[cnt]==-1: l[cnt]=n-1 elif l[cnt]==n: l[cnt]=0 cnt+=1 if l==chk: return 1 return 0 print 'Yes' if sol() else 'No'
サンプルをn回のシミュ結果見るとわかるけどn回でループするのでシミュもn回試した。解説ではシミュ回数を改善できるって言ってる気がするけどソレをどうするかは書いてない。。。