P13025 [GCJ 2021 Qualification] Cheating Detection

题目描述

100 名玩家正在参加一场包含 10000 道问题的问答锦标赛,玩家编号为 1 至 100。玩家 $i$ 拥有技能值 $S_i$,问题 $j$ 拥有难度值 $Q_j$。每个技能值和难度值都是从 $[-3.00, 3.00]$ 范围内均匀随机且独立选取的。例如,某个玩家的技能值可能是 2.47853,而某个问题的难度值可能是 -1.4172。 当玩家 $i$ 尝试回答问题 $j$ 时,其答对的概率为 $f(S_i - Q_j)$,其中 $f$ 是 sigmoid 函数: $$f(x) = \frac{1}{1 + e^{-x}}$$ 这里 $e$ 是自然对数的底(约 2.718...)。注意到对所有 $x$ 都有 $0 < f(x) < 1$,因此 $f(S_i - Q_j)$ 始终是有效的概率值。所有答题行为都是随机且独立进行的。 但有一个例外:这些玩家中**恰好有一个是作弊者**!作弊者是从所有玩家中均匀随机选出的,且与其他选择独立。作弊者的行为如下:在回答每个问题前,他们会抛一枚公平硬币。如果结果为正面,则不作弊并正常答题;如果为反面,则会秘密查阅正确答案并确保答对。形式化地说,他们对每个问题以 0.5 的概率独立决定是否作弊。 锦标赛的结果仅包含每位玩家对每道题目的答题结果(正确或错误)。除了上述描述外,你无法获知任何关于玩家技能值或问题难度的具体信息。 你需要在至少 $\mathbf{P}$% 的测试用例中正确识别作弊者。也就是说,在 $\mathbf{T}$ 个测试用例中,你至少要正确判断 $\mathbf{P} \cdot \mathbf{T}/100$ 个。

输入格式

输入的第一行给出测试用例数量 $\mathbf{T}$。第二行给出通过测试所需的正确率 $\mathbf{P}$。随后是 $\mathbf{T}$ 个测试用例,每个用例包含 100 行,每行 10000 个字符。第 $i$ 行的第 $j$ 个字符为 $1$ 表示第 $i$ 名玩家答对了第 $j$ 题,为 $0$ 表示答错。

输出格式

对于每个测试用例,输出一行 Case #$x$: $y$,其中 $x$ 是测试用例编号(从 1 开始),$y$ 是作弊者的编号(玩家编号从 1 开始)。

说明/提示

**样例说明** 注意样例输入使用 $\mathbf{T} = 1$ 和 $\mathbf{P} = 0$,因此不满足任何测试集的限制条件。其样例输出展示了实际的作弊者编号。 **数据范围** - $\mathbf{T} = 50$ **测试集 1(11 分,可见判定)** - $\mathbf{P} = 10$ **测试集 2(20 分,可见判定)** - $\mathbf{P} = 86$ 翻译由 DeepSeek V3 完成