技術室奥プログラミングコンテスト#2 参加記

はい。A,B問題のみ2完。C問題も色々書いたけど上手くいかなかったので提出せず。
http://tkppc2.contest.atcoder.jp

A - 入社(Join the Company)

python

s=raw_input()
print s+raw_input()

はい。一行目と二行目を結合する。

B - 書き換え(Rewrite

python

n,m=map(int,raw_input().split())
dp=[0]*(m+1)
for i in range(n):
    v,t=map(int,raw_input().split())
    for j in range(m-t,0,-1):
        if dp[j]!=0:
            dp[j+t]=max(dp[j+t],dp[j]+v)
    dp[t]=max(dp[t],v)
print max(dp)

テンプレそのまま使うとはいえB問題でDPとかおっさんには辛かった。

C - 有給休暇(Paid Vacation)

python

n,k=map(int,raw_input().split())
h=map(int,raw_input().split())
ans=tmp=chk=0
for i in range(n):
    while tmp<n:
        if h[tmp]==0 and chk<k:
            chk+=1
        elif h[tmp]==0:
            break
        tmp+=1
    ans=max(ans,tmp-i)
    if h[i]==0:
        chk-=1
print ans

はい。
http://tkppc2.contest.atcoder.jp/submissions/832370
から写経した。
外側のforは予定表のhの0番目が始点、その始点から予定表の先を見に行って休日でない日を上限のk回まで休日に変える。変えた後も次の休日でない日までは数え続ける。 始点をずらしながら見ていくのは、N=K=100000でhが全て0の時とかが怖そうで避けたんだがそうでもなかったのかな。。もったいないことをした。