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

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

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

AIM Tech Round 3 (Div.2)

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

A. Juicer

ざっくりと大意

・Kolyaはオレンジジュースを作ろうとしている。
・オレンジはn個あって、大きさは\(a_i\)である。
・大きさbを越えないオレンジを1から順にジューサーに入れる。越える大きさのオレンジは無視する。
・使ったオレンジがdより多くなったらカスを廃棄する、廃棄はオレンジを使い切った後でも行う。

Python2

n,b,d=map(int,raw_input().split())
l=map(int,raw_input().split())
ans=chk=w=0
for i in l:
    if i<=b:
        chk+=i
        if chk>d:
            ans+=1
            chk=0
print ans

解法が難しいというよりは問題文から作成と廃棄ルールを理解するのが難しいと思う。というか今でもわかってるのか不明。解答も他の人の提出を見てですし。 コードの内容からするとbより大きいオレンジは無視、それ以外は使う。使った量がdを越えたら廃棄を1回行う。という感じっぽい気がする。

B. Checkpoints

ざっくりと大意

・あとで

C. Letters Cyclic Shift

ざっくりと大意

・文字列sの空ではない最小の部分を選んで、z->y->x...->b->a->zのルールで文字を置換して辞書順最小のものを作る。
codeforcesなら全部置換したものが最小になる、abacabaなら2文字目のbだけを置換するのが最小になる。

Python2

s=list(raw_input())
ans=chk=0
if s.count('a')==len(s):
    s[-1]='z'
else:
    for i in range(len(s)):
        tmp=ord(s[i])-ord('a')
        if tmp>0:
            s[i]=chr(ord(s[i])-1)
            chk=1
        elif chk==1:
            break
print ''.join(s)

太字で強調してまで「exactly one non-empty substring」を置換する必要があると言っているので文字列sが全てaで辞書順最小でも置換をしなければならない。a->zの置換をしてより辞書順が最小なのは末尾1文字のみをzにする場合。a->zだけ例外にして処理。そうではない文字列はより先頭側に近いa以外の文字列からaが出現するか末尾までを置換する。