atcoder#ABC257C. [ABC257C] Robot Takahashi

[ABC257C] Robot Takahashi

配点 : 300300

問題文

子供と大人があわせて NN 人います。ii 番目の人の体重は WiW_i です。 それぞれの人が子供か大人かは、01 からなる長さ NN の文字列 SS によって表され、 SSii 文字目が 0 であるとき ii 番目の人が子供であることを、1 であるとき ii 番目の人が大人であることをさします。

ロボットである高橋君に対して実数 XX を設定すると、 高橋君はそれぞれの人に対して、体重が XX 未満なら子供、XX 以上なら大人と判定します。 実数 XX に対してf(X)f(X) を、高橋君に XX を設定したときに NN 人のうち子供か大人かを正しく判定できる人数で定めます。

XX が実数全体を動くとき、f(X)f(X) の最大値を求めてください。

制約

  • 1N2×1051\leq N\leq 2\times 10^5
  • SS01 からなる長さ NN の文字列
  • 1Wi1091\leq W_i\leq 10^9
  • N,WiN,W_i は整数

入力

入力は以下の形式で標準入力から与えられる。

NN

SS

W1W_1 W2W_2 \ldots WNW_N

出力

f(X)f(X) の最大値を整数で一行に出力せよ。

5
10101
60 45 30 40 80
4

X=50X=50 と設定すると、高橋君は 2,3,42,3,4 番目の人を子供、 1,51,5 番目の人を大人と判定します。 実際には 2,42,4 番目の人が子供、 1,3,51,3,5 番目の人が大人であるので、このとき、1,2,4,51,2,4,5 番目の合計 44 人に対して正しく判定できています。 よって、f(50)=4f(50)=4 です。

55 人全員に対して正しく判定できるような XX は存在しないのでこのときが最大です。よって、44 を出力します。

3
000
1 2 3
3

例えば、X=10X=10 とすると最大値 f(10)=3f(10)=3 を達成します。 全員が大人、または全員が子供である可能性もあることに注意してください。

5
10101
60 50 50 50 60
4

例えば、X=55X=55 とすると最大値 f(55)=4f(55)=4 を達成します。 同じ体重の人が複数人存在する可能性もあることに注意してください。