Quantcast
Channel: 初心者タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 21085

PythonでABC098-Cを解く

$
0
0

はじめに

PyBegiの人が解いてたので、便乗して解きます。

ABC098-C Attention

考えたこと
問題の制約的に最大でも$O(N)$程度で収めないといけないので、それぞれのリーダーごとに計算していては間に合わない。そこで、累積和を使います。これで毎回$sum$しなくても各リーダーごとに計算できます。ちなみに、Pythonの$sum$の計算量は$O(N)$です。ここまで分かったらやるだけ。

n=int(input())s=input()count_e=[0]*ncount_w=[0]*nforiinrange(n):ifi==0:ifs[i]=='E':count_e[i]=1else:count_w[i]=1continueifs[i]=='E':count_e[i]=count_e[i-1]+1count_w[i]=count_w[i-1]else:count_e[i]=count_e[i-1]count_w[i]=count_w[i-1]+1ans=10**9#e+wは高々3*10**5程度ですが、余裕を持たせています
foriinrange(n):ifs[i]=='E':e=count_e[-1]-count_e[i]#累積和を使う
w=count_w[i]else:e=count_e[-1]-count_e[i]#累積和を使う
w=count_w[i]-1#自分の分を引く
ans=min(ans,e+w)print(ans)

まとめ

制約を見て使えるアルゴリズムを思いつけるようになってきているので嬉しい。ではまた、おやすみなさい。


Viewing all articles
Browse latest Browse all 21085

Trending Articles