AT_newjudge_2308_heuristic_a AtCoder Contest Scheduling (Online Version)

题目描述

AtCoder 目前举办四种类型的比赛,分别为 ABC、ARC、AGC 和 AHC。随着用户数量的增长,为了满足更多用户的需求,AtCoder 决定将比赛类型数量增加到 26 种,从 AAC 到 AZC。为了方便起见,我们将这 26 种类型编号为第 1 类至第 26 类。每一天,AtCoder 恰好举办一次比赛,且每场比赛都在当天结束。请安排比赛,以使用户的满意度尽可能高。**举办一场比赛所带来的满意度提升取决于多种因素,例如 AtCoder 以外的比赛日程等。因此,不能事先决定全部比赛的日程,必须按天逐步确定。** 满意度按以下方式计算: - 第一天开始时,满意度为 0。满意度可以为负数。 - 举办比赛会增加满意度。满意度的增加量因多种因素(如 AtCoder 以外的比赛日程、星期几等)而异。在第 $d$ 天举办第 $i$ 类比赛会增加 $s_{d,i}$ 的满意度。**$s_{d,i}$ 的数值仅在决定第 $d$ 天举办哪种比赛时才会被告知,因此在确定第 $d$ 天的比赛时,并不知道第 $d'\geq d+1$ 天的 $s_{d',i}$。** - 若某种类型的比赛长时间未举办,则满意度会降低。第 $i$ 类比赛有一个整数 $c_i$,在每天 $d=1,2,...,D$ 结束时,满意度会按如下方式降低。令 $\mathrm{last}(d,i)$ 表示第 $i$ 类比赛最近一次(包括第 $d$ 天)举办的天数;若从未举办过,则令 $\mathrm{last}(d,i)=0$。在第 $d$ 天结束时,满意度减少 $\sum_{i=1}^{26}c_i \times (d-\mathrm{last}(d,i))$。

输入格式

首先,从标准输入读取天数 $D$ 及每种比赛类型 $i$ 的满意度减少速率 $c_i$,格式如下: > $D$ $c_1$ $c_2$ $\cdots$ $c_{26}$ 在所有测试用例中,$D=365$,且 $0\leq c_i \leq 100$,$c_i$ 为整数。 读取完上述信息后,重复如下流程 $D$ 次。 第 $d$ 天($1\leq d\leq D$)时,将会给出当天举办第 $i$ 类比赛所获得的满意度 $s_{d,i}$,输入格式如下: > $s_{d,1}$ $s_{d,2}$ $\cdots$ $s_{d,26}$ 其中 $0\leq s_{d,i} \leq 100000$,$s_{d,i}$ 为整数。 读取上述信息后,请将当天举办的比赛类型 $t_d$($1\leq t_d\leq 26$)输出到标准输出,每行一个数字。**每次输出必须换行,并及时刷新标准输出**,否则可能被判为 TLE。**请注意,在输出第 $d$ 天的 $t_d$ 之前,不会给出第 $d+1$ 天的输入。** 你的程序可以输出以 # 开头的注释行。网页版可视化工具会在对应时机显示注释行,这有助于调试和分析。评测程序会忽略所有注释,你可直接提交包含注释行的程序。

输出格式

每天输出一个整数 $t_d$($1\leq t_d\leq 26$),表示当天举办的比赛类型。每个输出需另起一行并刷新输出流。

说明/提示

### 评分方式 令 $S$ 表示你的程序在第 $D$ 天结束时的满意度。$B$ 表示按基准日程安排(每天举办 $((d-1)\%26)+1$ 类型比赛)的 $D$ 天后的满意度。其中 $(d-1)\%26$ 表示将 $(d-1)$ 除以 26 的余数。你的分数为 $\max(S-B+1, 0)$。 对于每个测试点,计算**相对分数** $\mathrm{round}(10^9\times \frac{\mathrm{YOUR}}{\mathrm{MAX}})$,其中 YOUR 是你的分数,MAX 是该测试点所有提交中最高分。你的提交得分为所有测试点相对分数之和。 最终排名将以系统测试的更多输入作为依据,仅对最后一次非 CE 的提交进行评测。无论临时/系统测试,都只计算最后一次非 CE 提交的成绩;计算相对分数时也只取最后提交的成绩。若输出格式非法或超时,相关测试点分数记为 0,此测试点不计入 MAX。 #### 测试点数量 - 临时测试:50 个 - 系统测试:1000 个。竞赛结束后将公开 [seeds.txt](https://img.atcoder.jp/newjudge-2308-heuristic/seeds.txt)(sha256=83dc490c0904b4cbb1d541143bd1a6f478180b94df4f834d5d873330ffa62ad6)。 #### 关于相对评分系统 临时/系统测试均以最后一次非 CE 提交为准。最后提交用于计算每个测试点的 MAX,进而求相对分数。 榜单中显示的是相对分数,每当有新提交,所有相对分数将被重新计算。而提交记录页中显示的是各测试点原始分数之和,不显示相对分数。若想查阅历史提交的相对分数需重新提交。若你的提交在某些测试点输出非法或超时,则这些点分数为 0,但榜单上只汇总正确点的相对分数。 #### 关于执行时间 程序实际运行时间可能略有波动。系统测试大量并发评测,时间会比临时测试多几个百分点。因此,贴近时间限制的提交在系统测试中可能变为 TLE。请在程序中计量运行时间、自行提前终止进程,或合理控制代码运行效率。 ### 输入生成方式 令 $\mathrm{rand}(L,U)$ 表示返回 $[L,U]$ 区间的均匀随机整数。$\mathrm{normal}(\mu,\sigma)$ 为均值为 $\mu$、标准差为 $\sigma$ 的正态分布随机数。 每个 $c_i$ 由 $\mathrm{rand}(0,100)$ 生成。对每个 $i$,$\mu_i=\mathrm{rand}(10000,20000)$,$\sigma_i=\mathrm{rand}(2000,8000)$。然后,每个 $s_{d,i}$ 由 $\min(\max(\mathrm{round}(\mathrm{normal}(\mu_i,\sigma_i)),0),100000)$ 生成。 ### 工具(输入生成器与可视化工具) - [网页版](https://img.atcoder.jp/newjudge-2308-heuristic/af186b91.html?lang=ja) - [本地版](https://img.atcoder.jp/newjudge-2308-heuristic/af186b91.zip):需要 Rust 语言编译环境([Rust 官网](https://www.rust-lang.org/))。 - [Windows 预编译版](https://img.atcoder.jp/newjudge-2308-heuristic/af186b91_windows.zip):无需 Rust 环境可直接使用。 请注意比赛期间不得分享可视化结果或讨论解题思路。 由 ChatGPT 5 翻译