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

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

Codeforces Round #297 (Div.2)

はい。
http://codeforces.com/contest/525

A. Vitaliy and Pie

ざっくりと大意

・与えられた文字列の左端から右端へ移動する??
・移動する途中で小文字の鍵を拾い、文字種の一致した大文字の部屋のドアを開けて移動していく??
・文字種の一致しない部屋が、途中で拾えないので事前に用意しておく必要のある鍵はいくつあるか??

方針のようなもの

・左端から小文字は保存して、大文字は保存されている小文字に一致があるかをシミュレートしていく。

python

n=int(raw_input())
l=[0]*26
s=raw_input()
ans=chk=0
for i in s:
    if i.islower():
        l[ord(i)-97]+=1
    else:
        if l[ord(i)-65]:
            l[ord(i)-65]-=1
        else:
            ans+=1
print ans

文字そのものを保存していくのではなくてアルファベットのそれぞれの個数を配列に保存して、小文字は配列を加算する。大文字は配列の値が1以上なら1減算、値が0なら事前に用意しなければいけないものになるので回答用の変数を1加算する。

B. Pasha and String

ざっくりと大意

・文字列sが与えられて、文字列に対して\(a_i\)から|s|-\(a_i\)+1の部分だけ反転させるという処理をm回行う。

方針のようなもの

・単純にシミュレートしたらTLEになったので後で

python

#TLEになったものです
s=raw_input()
m=raw_input()
l=map(int,raw_input().split())
chk=len(s)
for i in l:
    p=s[i-1:chk-i+1]
    s=s[:i-1]+s[i-1:chk-i+1][::-1]+s[chk-i+1:]
print s