QOJ.ac

QOJ

Límite de tiempo: 10 s Límite de memoria: 1024 MB Puntuación total: 23 Interactivo

#11464. 陶艺抽奖

Estadísticas

陶器宫殿(Pottery Palace)即将举办一场抽奖活动,奖品是艺术家 Cody-Jamal 制作的珍贵花瓶。抽奖规则如下:

  • 共有 100 人参与抽奖。每位玩家都有一个 1 到 100 之间的唯一编号,并获得一枚刻有该编号的代币。
  • 桌上有 20 个空的陶制花瓶,编号为 1 到 20。花瓶的开口很窄,足以放入代币,但又窄到玩家无法从外部窥视内部。
  • 在抽奖的第 $i$ 天,持有编号为 $i$ 的代币的玩家会选择一个花瓶,并将他们的代币放入其中。由于所有花瓶(除了标签外)完全相同,每位玩家都会独立且均匀随机地选择一个花瓶。
  • 在第 100 天,当 100 号玩家放入代币后,组织者会摇晃花瓶以确定每个花瓶内的代币数量。如果恰好有一个花瓶内的代币数量少于其他所有花瓶,则该花瓶为“获胜花瓶”。组织者随后会倒出该花瓶中的所有代币,每一位代币编号出现在这些被倒出的代币中的玩家都将赢得一个花瓶!如果有多个花瓶并列最少,则无人获奖。

你受雇测试该抽奖系统的安全性,并将参与一些试运行。公司始终分配给你编号 100——也就是说,你代替了第 100 号玩家。

你在夜间发现了一些篡改抽奖的方法,但由于安保严密,你只能做有限的操作!具体来说,在抽奖的前 99 天的每一天结束后,你可以执行以下操作中的恰好一项

  • 伪造一枚你选择的玩家编号(1 到 100,包含边界)的代币,并将其放入你选择的花瓶中。你是一位非常出色的伪造者:如果存在获胜花瓶,该花瓶中任何伪造的代币都会导致对应编号的玩家获胜(有一个例外,见下文)。
  • 使用特殊摄像机查看你选择的一个花瓶中所有代币的编号。

你可以在不同的夜晚执行不同的操作,并且可以动态选择:你不需要提前决定所有的操作。

在第 100 天,轮到你将自己的代币放入你选择的花瓶中(你不需要均匀随机选择)。你不能在这一天执行任何其他操作。

你知道,如果获胜花瓶中包含同一玩家的多枚代币,那么作弊行为将显而易见,无人会获胜。然而,其他花瓶中是否包含同一玩家的多枚代币并不重要,因为组织者永远不会看到那些代币。

你的目标是在至少 90% 的测试用例中获胜。

输入格式

这是一个交互式问题。请确保你已阅读 FAQ 中关于交互式问题的部分。

最初,你的程序应读取一行,包含一个整数 $T$,表示测试用例的数量。然后,你需要处理 $T$ 个测试用例。

在测试用例开始时,裁判输出一行,包含一个整数:当前天数。(裁判从第 1 天开始,在第 $i$ 天,它会打印 $i$。)在你的程序读取该整数后,应写入一行,包含两个整数 $V$ 和 $P$,其中 $1 \le V \le 20$ 且 $0 \le P \le 100$。裁判将按如下方式解释:

  • 如果 $1 \le P \le 100$,你将玩家 $P$ 的代币放入花瓶 $V$ 中。裁判不会返回任何响应。
  • 如果 $P = 0$,你检查花瓶 $V$ 的内容。裁判会写入一行包含整数的内容。第一个整数是 $N$,即花瓶 $V$ 中的代币数量,随后是 $N$ 个整数:每个代币上的玩家编号,按非递减顺序排列。

注意,在第 100 天,你必须放入自己的代币,因此 $P$ 必须为 100。

请记住,在第 $i$ 天($1 \le i \le 99$),裁判会按照题目描述模拟第 $i$ 位玩家的操作。这发生在你当天的操作之前。

在你发送第 100 天的移动后,如果这是最后一个测试用例,你的程序应终止;否则,它应开始读取下一个测试用例的数据。(注意,裁判不会告诉你每个用例是否正确。)裁判只会在你尝试完所有 $T$ 个测试用例后检查你是否有足够的正确答案,所以不要提前停止!例如,如果你正确回答了前 250 个用例中的 225 个然后退出,或者提供了格式错误的输入,你的解法将不会被视为正确。

如果你的程序输出了非法内容(例如,给出了无效的 $P$ 或 $V$ 值,或者在第 100 天尝试检查花瓶),裁判将向你的输入流发送一行包含 $-1$ 的内容,之后不会再发送任何输出。如果你的程序在收到 $-1$ 后继续等待裁判,程序将超时,导致 Time Limit Exceeded 错误。请注意,你有责任让程序及时退出以接收 Wrong Answer 判决,而不是 Time Limit Exceeded 错误。通常情况下,如果超出总内存限制或程序出现运行时错误,你将收到相应的判决。

样例

样例输入 1

250
1
2
3
4
5
6

样例输出 1

8 100
8 99
8 100
20 7
8 0
8 101

说明 1

t = readline_int() // 读取 250 到 t
curr_day = readline_int() // 读取 1 (第 1 天)
printline 8 100 to stdout // 将玩家 100 的代币放入花瓶 8
flush stdout
curr_day = readline_int() // 读取 2 (第 2 天)
printline 8 99 to stdout // 将玩家 99 的代币放入花瓶 8
flush stdout
curr_day = readline_int() // 读取 3 (第 3 天)
printline 8 100 to stdout // 将玩家 100 的代币放入花瓶 8
flush stdout
curr_day = readline_int() // 读取 4 (第 4 天)
printline 20 7 to stdout // 将玩家 7 的代币放入花瓶 20
flush stdout
curr_day = readline_int() // 读取 5 (第 5 天)
printline 8 0 to stdout // 检查花瓶 8
flush stdout
tokens = readline_int_list() // 读取 5 2 5 99 100 100 (玩家 2 和 5 恰好选择了花瓶 8)
curr_day = readline_int() // 读取 6 (第 6 天)
printline 8 101 to stdout // 尝试添加一个无效玩家编号的代币
flush stdout
curr_day = readline_int() // 读取 -1 (裁判已判定我们的解法不正确)
exit // 退出以避免歧义的 TLE 错误

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.