QOJ.ac

QOJ

実行時間制限: 10 s メモリ制限: 1024 MB 満点: 29 インタラクティブ

#12079. 棒棒糖商店

統計

你拥有一家棒棒糖店。在一天开始时,你制作了 $N$ 支棒棒糖,每支都有独特的口味,例如越橘、樱桃或青柠。一天中会有 $N$ 位顾客依次进店。每位顾客会给你一份他们喜欢的棒棒糖口味列表。你可以卖给他们其中任意一种口味的棒棒糖,前提是你当天还没有把这种口味卖给别人(因为每种口味只有一支棒棒糖)。如果他们喜欢的口味都已经卖完了,你就无法卖给他们棒棒糖,他们会失望地离开你的店。

在顾客进店之前,你不知道他们的口味偏好。每位顾客是否喜欢某种口味是随机决定的,且与其他口味的喜好以及其他人的喜好无关。然而,市场研究表明,某些口味被大众喜欢的概率可能更高!例如,青柠口味被某位特定顾客喜欢的概率可能是 $10\%$,而樱桃口味的概率可能是 $1\%$。这些概率值是在区间 $[0.005, 0.1]$ 内独立且均匀随机选择的。

显然,你希望尽可能多地卖出棒棒糖给这 $N$ 位顾客!但是,由于你无法预知顾客的需求,你并不总能做出最优决策——有时你可能卖给了一位顾客某种口味,后来却希望当时卖的是另一种。

假设你预先知道所有顾客的偏好并能提前规划,那么你最多可以卖出 $M$ 支棒棒糖。虽然你无法预知顾客的偏好,但我们要求你在每个测试用例中卖出的棒棒糖数量至少达到 $M$ 的 $90\%$。

输入格式

这是一个交互式问题,这意味着输入和输出的概念与标准 Code Jam 问题不同。你将与一个单独的进程进行交互,该进程既为你提供信息,也评估你的回答。所有信息通过标准输入进入你的程序;你需要传达的任何内容都应通过标准输出发送。请记住,许多编程语言默认会对输出进行缓冲,因此请确保在阻塞等待响应之前,你的输出确实已发送(例如,通过刷新缓冲区)。通过标准错误发送的任何内容都会被忽略,但它可能会消耗一些内存并计入你的内存限制,因此请不要溢出它。

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

对于每个测试用例,你的程序应读取一行,包含一个整数 $N$,即棒棒糖的数量(也等于顾客的数量)。

然后,对于每一位顾客,你的程序应读取一行,其中包含以空格分隔的整数。第一个整数 $D$ 是该顾客喜欢的口味数量。随后是 $D$ 个整数,即这些口味的 ID,按严格递增顺序排列。口味 ID 的范围是 $[0, N - 1]$。注意,对于某些或所有顾客,$D$ 可能为零。

在读取每一行后,你的程序必须向标准输出写入一行,包含要卖给该顾客的口味 ID,如果不想卖给该顾客任何棒棒糖,则输出 $-1$。

在为该测试用例写入第 $N$ 行后,如果这是最后一个测试用例,你的程序应终止;否则,它应开始读取下一个测试用例的数据。

如果你的程序出现错误(例如,试图卖给顾客一种已经卖出的口味,或者试图卖给顾客一种他们不喜欢的口味,或者使用了错误的输出格式,或者输出了越界的值),评测机将向你的输入流发送 $-1$,并且之后不会发送任何其他输出。如果你的程序在收到 $-1$ 后继续等待评测机,你的程序将超时,导致“超出时间限制”(Time Limit Exceeded)错误。请注意,你有责任让你的程序及时退出以接收适当的判决(错误答案、运行时错误等),而不是“超出时间限制”错误。通常情况下,如果总时间或内存超出限制,或者你的程序出现运行时错误,你将收到相应的判决。在一个测试用例中卖出的棒棒糖数量不足不会导致你收到 $-1$ 消息。

在处理完所有测试用例后,你不应向评测机发送额外信息。换句话说,如果你的程序在最后一个测试用例之后继续向标准输出打印内容,你将得到“错误答案”(Wrong Answer)判决。

说明

在每个测试用例开始时,评测机将确定所有顾客的偏好。也就是说,它将使用一个(隐藏的)概率列表 $P_i$(每个口味一个,介于 $0.005$ 和 $0.1$ 之间);每位顾客有 $P_i$ 的概率喜欢第 $i$ 种口味。也就是说,表示顾客 $j$ 是否喜欢口味 $i$ 的随机变量是独立同分布的。这些偏好在整个测试过程中是恒定的,不会因你的选择而改变。

样例

样例输入 1

10
4
1 2
0
1 2
2 1 3
1
1 0
5
2 1 3
2 1 2
-1

样例输出 1

2
-1
-1
3
-1
1
1

测试工具

你可以使用测试工具在本地或我们的平台上进行测试。要在本地测试,你需要将该工具与你的代码并行运行;你可以使用我们的交互式运行器(interactive runner)来实现。有关更多信息,请阅读该文件中的注释,并查看常见问题解答(FAQ)中的“交互式问题”部分。

测试工具的说明包含在工具内部的注释中。我们鼓励你添加自己的测试用例。请注意,虽然测试工具旨在模拟评测系统,但它不是真正的评测系统,其行为可能有所不同。如果你的代码通过了测试工具但在真正的评测机上失败,请检查常见问题解答(FAQ)的“编码”部分,确保你使用的编译器与我们相同。

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.