AT_ahc053_a [AHC053A] Random Sum Game

题目描述

有 $N$ 张空白卡片,以及一个随机数生成器,每次独立等概率地生成 $M$ 个在 $L$ 到 $U$ 间(包含两端)的整数。 你可以利用这些物品进行如下游戏: 1. 首先,你可以任选 $N$ 个在 $1$ 到 $U$ 之间(包含两端)的整数 $A_1, \dots, A_N$,并将 $A_i$ 写在第 $i$ 张卡片上。 2. 接着,使用随机数生成器生成 $M$ 个整数 $B_1, \dots, B_M$。 3. 你可以丢弃任意数量(可以为零)的卡片,并将剩下的卡片分成 $M$ 个堆(每个堆可以为空)。 本游戏的目标是使得第 $j$ 堆卡片上数字的和尽可能接近 $B_j$。

输入格式

首先,标准输入给出 $N, M, L, U$。 > $N$ $M$ $L$ $U$ 接下来,你需要输出你写在第 $i$ 张卡片上的整数 $A_i$,即: > $A_1$ $A_2$ $\dots$ $A_N$ 然后,标准输入会给出 $B_1, \dots, B_M$。注意,你必须在读入 $B_1, \dots, B_M$ 之前先输出 $A_1, \dots, A_N$。 > $B_1$ $B_2$ $\dots$ $B_M$ 最后,令 $X_i = 0$ 表示你决定丢弃第 $i$ 张卡片,否则 $X_i$ 为该卡片所属的堆编号,则输出如下内容: > $X_1$ $X_2$ $\dots$ $X_N$ **所有输出均须以换行结尾,并且必须及时刷新标准输出。** 否则你的提交可能被判为 TLE。

输出格式

(见上文,严格按照流程输出。)

说明/提示

## 评分方式 设第 $j$ 堆卡片上数字的和为 $S_j$,定义误差 $E = \sum_{j=1}^M |S_j - B_j|$。则你的得分为 $\mathrm{round}((20 - \log_{10}(1 + E)) \times 5 \times 10^7)$。 一共有 $150$ 组测试数据,提交的总得分为所有测试数据的得分总和。如果在某些测试点输出不合法或超时,整份提交将被判为 WA 或 TLE,得分为 $0$。比赛时只计最高得分,不进行赛后系统测试。多名选手得分相同,则算并列,不区分提交时间先后。 ## 输入生成方式 - $N = 500, M = 50, L = 10^{15} - 2 \times 10^{12}, U = 10^{15} + 2 \times 10^{12}$ - 生成 $M$ 个在 $L$ 到 $U$ 之间(包含两端)的整数,独立均匀随机,记为 $B_1, \dots, B_M$,并升序排列。 ## 工具(输入生成器与可视化工具) - [网页版](https://img.atcoder.jp/ahc053/Q405bDmv.html?lang=zh):功能比本地版更强,还提供动画展示。 - [本地版](https://img.atcoder.jp/ahc053/Q405bDmv.zip):需有 [Rust 语言](https://www.rust-lang.org/)编译环境。 - [Windows 预编译版](https://img.atcoder.jp/ahc053/Q405bDmv_windows.zip):如果你不熟悉 Rust 环境,请使用此工具。 请注意,比赛期间禁止公开可视化结果、讨论解法或相关想法。 由 ChatGPT 5 翻译