読者です 読者をやめる 読者になる 読者になる

君はまるで砂漠に咲く、一輪の花。

僕はその花に引き寄せられる蝶。

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を置換した場合のスコアを調べて最大の値を出力する。