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

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

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

Codeforces Round #188 (Div. 2)

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

A. Even Odds

ざっくりと大意

・{}内に1からnまでの数が先に奇数と後に偶数とがそれぞれ昇順で纏められる。
・{}内のk番目の数はいくつか?

方針のようなもの

・最大値が1012なので{}を作成するのは無理。法則のようなものがあるはずなのでそれで。

python

n,k=map(int, raw_input().split())
if k<=(n+1)/2:
    print 1+(k-1)*2
else:
    print (k-(n+1)/2)*2

出力対象が奇数なのか偶数なのかで計算の仕方を分ける。ただ、この計算式はもう少し簡略化出来るはず。数学苦手なのでよくわかりませんが。そんなに難易度高くない問題だったのに放置になってのが謎。

B. Strings of Power

ざっくりと大意

・heavyで始まり、metalで終わっているのを数える。

方針のようなもの

・.split('heavy')でheavyで区切って、区切られたそれぞれの中にmetal幾つあるかを数えたり出来るので。

python

w=map(str,raw_input().split('heavy'))
ans=chk=be=0
ic=[]
for i in range(1,len(w)):
    if 'metal' in w[i]:
        ic.append(w[i].count('metal'))
    else:
        ic.append(0)
ans=chk=sum(ic)
for i in range(1,len(ic)+1):
    chk-=ic[i-1]
    ans+=chk
print ans

他の人の提出を見ると色々な文字処理の方法が有ったらしい。問題文は解読できたけど文字列処理がわからないとかを減らすために他の手法も丁寧に見ておこう。後で。。。