技術室奥プログラミングコンテスト#2 参加記
はい。A,B問題のみ2完。C問題も色々書いたけど上手くいかなかったので提出せず。
http://tkppc2.contest.atcoder.jp
A - 入社(Join the Company)
s=raw_input() print s+raw_input()
はい。一行目と二行目を結合する。
B - 書き換え(Rewrite)
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)
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の時とかが怖そうで避けたんだがそうでもなかったのかな。。もったいないことをした。