Educational Codeforces Round 9
はい。
http://codeforces.com/contest/632
A. Grandma Laura and Apples
ざっくりと大意
・Laura婆さんは市場にりんごを売りに行って完売したが、初めにいくつ持っていったかを覚えていない。
・購入者がn人いたことは覚えている。それぞれの購入者はその時の在庫の半分を購入していった。
・問題文が何を言っているのかわからん。
Python2
n,p=map(int,raw_input().split()) ans=chk=0 l=[] for i in range(n): l.append(raw_input()) for a,i in enumerate(l[::-1]): if a==0: ans+=p/2 chk=1 else: if i=='half': ans+=p*chk chk*=2 else: ans+=p*chk+p/2 chk=chk*2+1 print ans
何を言っているのか分からんが、最終の販売データから見ていってhalfplusの時は1個分(奇数分)はpの半額、他は個数 * p、halfなら個数 * pを加算してたらACになった。けど問題文が何をいってるのかよくわからじ。
B. Alice, Bob, Two Teams
ざっくりと大意
・AliceとBobはチームを別れてゲームをしている。
・ゲームにはnピースあって、それぞれの強さは\(p_i\)である。
・初めにAliceがn文字をA,Bに分ける。
・次にBobが最大で1度だけ先頭から任意のトコまでor末尾から任意のトコまでの最も都合の良い区間のA,Bを反転させる。
・Aliceは’A',Bobは'B'の位置に対応した数列pのスコアを得るときにBobの最大スコアはいくつか。
・サンプル1は末尾から区間長1を反転させるのが最良でスコア11になる、サンプル2は先頭/末尾どちらからでも区間長5を反転させるのが最良でスコア15になる。
Python2
n=int(raw_input()) #n,k=map(int,raw_input().split()) l=map(int,raw_input().split()) ans=chk=d=p=q=0 s=raw_input() A=B=0 for a,i in enumerate(s): if i=='B': d+=l[a] ans=p=q=d h=l[::-1] for a,i in enumerate(s): if i=='B': p-=l[a] else: p+=l[a] tmp=-1*(a+1) if s[tmp]=='B': q-=h[a] else: q+=h[a] ans=max(ans,p,q) print ans
初期配置でのBobのスコアを調べる。先頭から末尾までと、末尾から先頭までのA,Bを置換した場合のスコアを調べて最大の値を出力する。