atcoder#ABC257C. [ABC257C] Robot Takahashi

[ABC257C] Robot Takahashi

题目描述

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

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

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

输入格式

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

N N S S W1 W_1 W2 W_2 \ldots WN W_N

输出格式

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

题目大意

题目描述

NN 个人,每个人要么是小孩,要么是大人。第 ii 个人的体重为 WiW_i

给定一个长度为 NN 的字符串 SS ,若 SS 的第 ii 个字符为0,则第 ii 个人为小孩;若 SS 的第 ii 个字符为1,第 ii 个人为大人。

高桥君认为,如果一个人体重小于 XX ,则他是小孩;如果一个人体重大于等于 XX ,则他是大人。

请选择合适的实数 XX ,使得高桥君判断正确的人数最大。输出这个最大值。

数据范围

1N2×1051 \leq N \leq 2×10^5

SS 是一个长度为 NN 且仅含01的字符串。

1Wi1091 \leq W_i \leq 10^9

保证 NNWiW_i 都是整数。

输入格式

数据以下列形式给出:

NN

SS

W1W_1 W2W_2WNW_N

输出格式

选择合适的实数 XX ,使得高桥君判断正确的人数最大。输出这个最大值,并在末尾换行。

样例解释

样例1

高桥君可以令 X=50X=50 ,他判定第 2,3,42,3,4 个人为小孩,其他人为大人。实际上,只有第 2,42,4 个人为小孩,其他人为大人。高桥君判断正确了第 1,2,4,51,2,4,5 个人,一共 44 个人。这是最大值。

样例2

高桥君可以令 X=10X=10 ,三个人都将判断正确。注意,有可能所有人都是大人,也有可能所有人都是小孩。

样例3

高桥君可以令 X=55X=55 ,他将判断正确了 44 个人。这是最大值。注意,可能会有两个人的体重相同。

5
10101
60 45 30 40 80
4
3
000
1 2 3
3
5
10101
60 50 50 50 60
4

提示

制約

  • 1 N 2× 105 1\leq\ N\leq\ 2\times\ 10^5
  • S S 01 からなる長さ N N の文字列
  • 1 Wi 109 1\leq\ W_i\leq\ 10^9
  • N,Wi N,W_i は整数

Sample Explanation 1

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

Sample Explanation 2

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

Sample Explanation 3

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