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

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

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

Educational Codeforces Round 4

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

A. The Text Splitting

ざっくりと大意

・長さnの文字列sとp,qが与えられる。文字数p,qの両方でもどちらかだけでもで表示できるか。
・Helloは2,3文字か3,2文字で表示可能。Privetは4と5では表示不可で-1。

python

n,p,q=map(int,raw_input().split())
s=raw_input()
p,q=max(p,q),min(p,q)
l=[n/p,0]
if n%p==0:
    print l[0] 
    for i in range(l[0]):
        print s[:p]
        s=s[p:]
    exit()
else:
    chk=n%p
    for i in range(l[0]+1):
        if chk%q==0:
            print l[0]+chk/q

            for i in range(l[0]):
                print s[:p]
                s=s[p:]
            for i in range(chk/q):
                print s[:q]
                s=s[q:]
            exit()
        chk+=p
        l[0]-=1
    print -1

もうちょっと短く書けるんですが。。。nに対してp,qを使って余りがないようにというのは初級問題では割りとよくあると思う。先に大きい数のみで割り切れるか試して、余りがあったらqで割り切れるかを試しつつpで使った分を減らすみたいなことをした。先に使うのは大きい数のがいいと思う。大きいのを減らせば小さいのが使える保証があるので。

B. HDD is Outdated Technology

ざっくりと大意

・HDDのセクタが1からn番まである。
・サンプル1は(最初の位置は解に影響しない?)1から2に移動するのが距離1、2から3に移動するのが距離2で解が3。

python

n=int(raw_input())
f={i:a for a,i in enumerate(map(int,raw_input().split()))}
ans=chk=0
for i in range(1,n):
    ans+=abs(f[i]-f[i+1])
print ans

1番目と2番目の距離を調べて、2番目と3番目の距離をさっきのに加算て....をしていくとTLEがありえるっぽいのでリストの持ちかた工夫するか連想配列使うかなどが必要だと思います。