T735422 第21次CSP认证第二题:期末预测之最佳阈值
题目背景
考虑到安全指数是一个较大范围内的整数、小菜很可能搞不清楚自己是否真的安全,顿顿决定设置一个阈值 *θ*,以便将安全指数 *y* 转化为一个具体的预测结果——“会挂科”或“不会挂科”。
因为安全指数越高表明小菜同学挂科的可能性越低,所以当 *y*≥*θ* 时,顿顿会预测小菜这学期很安全、不会挂科;反之若 *y*
题目描述
具体来说,顿顿评估了 *m* 位同学上学期的安全指数,其中第 *i*(1≤*i*≤*m*)位同学的安全指数为 *$y_i$*,是一个 $[0,10^8]$ 范围内的整数;同时,该同学上学期的挂科情况记作 *$result_i$*∈0,1,其中 0 表示挂科、1 表示未挂科。
相应地,顿顿用 $predict_θ(y)$
表示根据阈值 *θ* 将安全指数 *y* 转化为的具体预测结果。 如果
$predict_θ(y_j)$ 与 $result_j$
相同,则说明阈值为 *θ* 时顿顿对第 *j* 位同学是否挂科预测正确;不同则说明预测错误。
$$
\text{predict}_\theta(y) = \begin{cases} 0 & y < \theta \\ 1 & y \ge \theta \end{cases}
$$
最后,顿顿设计了如下公式来计算最佳阈值 *θ* :
$$
\theta^* = \max \operatorname*{argmax}_{\theta \in y_i} \sum_{j=1}^m (\text{predict}_\theta(y_j) == result_j)
$$
该公式亦可等价地表述为如下规则:
1. 最佳阈值仅在 *$y_i$* 中选取,即与某位同学的安全指数相同;
2. 按照该阈值对这 *m* 位同学上学期的挂科情况进行预测,预测正确的次数最多(即准确率最高);
3. 多个阈值均可以达到最高准确率时,选取其中最大的。
输入格式
从标准输入读入数据。
输入的第一行包含一个正整数 *m*。
接下来输入 *m* 行,其中第 *i*(1≤*i*≤*m*)行包括用空格分隔的两个整数 *$y_i$* 和 *$result_i$*,含义如上文所述。
输出格式
输出到标准输出。
输出一个整数,表示最佳阈值 **$θ^*$**。
说明/提示
### 样例1解释
按照规则一,最佳阈值的选取范围为 0,1,3,5,7。
$θ=0$ 时,预测正确次数为 4;
$θ=1$ 时,预测正确次数为 5;
$θ=3$ 时,预测正确次数为 5;
$θ=5$ 时,预测正确次数为 4;
$θ=7$ 时,预测正确次数为 3。
阈值选取为 1 或 3 时,预测准确率最高; 所以按照规则二,最佳阈值的选取范围缩小为 1,3。
依规则三,$θ^∗=max1,3=3$。
### 子任务
$70\%$ 的测试数据保证 $m≤200$;
全部的测试数据保证 $2≤m≤10^5$。