CF1368F.Lamps on a Circle
省选/NOI-
通过率:0%
时间限制:2.00s
内存限制:512MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
This is an interactive problem.
John and his imaginary friend play a game. There are n lamps arranged in a circle. Lamps are numbered 1 through n in clockwise order, that is, lamps i and i+1 are adjacent for any i=1,…,n−1, and also lamps n and 1 are adjacent. Initially all lamps are turned off.
John and his friend take turns, with John moving first. On his turn John can choose to terminate the game, or to make a move. To make a move, John can choose any positive number k and turn any k lamps of his choosing on. In response to this move, John's friend will choose k consecutive lamps and turn all of them off (the lamps in the range that were off before this move stay off). Note that the value of k is the same as John's number on his last move. For example, if n=5 and John have just turned three lamps on, John's friend may choose to turn off lamps 1,2,3, or 2,3,4, or 3,4,5, or 4,5,1, or 5,1,2.
After this, John may choose to terminate or move again, and so on. However, John can not make more than 104 moves.
John wants to maximize the number of lamps turned on at the end of the game, while his friend wants to minimize this number. Your task is to provide a strategy for John to achieve optimal result. Your program will play interactively for John against the jury's interactor program playing for John's friend.
Suppose there are n lamps in the game. Let R(n) be the number of turned on lamps at the end of the game if both players act optimally. Your program has to terminate the game with at least R(n) turned on lamps within 104 moves. Refer to Interaction section below for interaction details.
For technical reasons hacks for this problem are disabled.
Interaction
Initially your program will be fed a single integer n (1≤n≤1000) — the number of lamps in the game. Then the interactor will wait for your actions.
To make a move, print a line starting with an integer k (1≤k≤n), followed by k distinct integers l1,…,lk (1≤li≤n) — indices of lamps you want to turn on. The indices may be printed in any order. It is allowed to try to turn on a lamp that is already on (although this will have no effect).
If your move was invalid for any reason, or if you have made more than 104 moves, the interactor will reply with a line containing a single integer −1. Otherwise, the reply will be a line containing a single integer x (1≤x≤n), meaning that the response was to turn off k consecutive lamps starting from x in clockwise order.
To terminate the game instead of making a move, print a line containing a single integer 0. The test will be passed if at this point there are at least R(n) lamps turned on (note that neither R(n), nor the verdict received are not communicated to your program in any way). This action does not count towards the number of moves (that is, it is legal to terminate the game after exactly 104 moves).
To receive the correct verdict, your program should terminate immediately after printing 0, or after receiving −1 as a response.
Don't forget to flush your output after every action.
这是一个交互式问题。
约翰和他的想象中的朋友玩一个游戏。有 n 盏灯围成一个圆圈排列。灯按顺时针方向编号为 1 到 n,即对任意 i=1,…,n−1,灯 i 与灯 i+1 相邻,且灯 n 与灯 1 也相邻。初始时所有灯均处于关闭状态。
约翰和他的朋友轮流行动,约翰先手。在自己的回合中,约翰可以选择终止游戏,或者进行一次操作。若选择操作,约翰可任选一个正整数 k,并打开任意 k 盏他指定的灯。作为对此操作的回应,约翰的朋友将选择一段长度为 k 的连续灯(即 k 盏相邻的灯),并将它们全部关闭(该区间内原本已关闭的灯保持关闭)。注意:此处的 k 值与约翰上一次操作中所选的 k 值相同。例如,若 n=5,且约翰刚刚打开了三盏灯,则他的朋友可选择关闭灯 1,2,3,或 2,3,4,或 3,4,5,或 4,5,1,或 5,1,2。
此后,约翰可再次选择终止游戏或继续操作,依此类推。但约翰的操作总数不得超过 104 次。
约翰的目标是最大化游戏结束时开启的灯的数量,而他的朋友则希望最小化该数量。你的任务是为约翰设计一种策略,使其达成最优结果。你的程序将作为约翰,与评测系统(代表约翰的朋友)进行交互式博弈。
假设游戏中有 n 盏灯。记 R(n) 为双方均采取最优策略时,游戏结束时开启的灯的数量。你的程序必须在不超过 104 次操作内终止游戏,且此时开启的灯数至少为 R(n)。交互细节见下文“交互”部分。
出于技术原因,本题禁止 Hack。
交互
初始时,你的程序将读入一个整数 n(1≤n≤1000),表示游戏中灯的数量。随后评测系统将等待你的操作。
要执行一次操作,请输出一行,开头是一个整数 k(1≤k≤n),后跟 k 个互不相同的整数 l1,…,lk(1≤li≤n),表示你希望打开的灯的编号。这些编号可以以任意顺序输出。允许尝试打开一盏已经开启的灯(尽管这不会产生任何效果)。
如果你的操作因任何原因无效,或你已执行超过 104 次操作,评测系统将回复一行,仅含一个整数 −1。否则,它将回复一行,仅含一个整数 x(1≤x≤n),表示其回应是:从灯 x 开始,沿顺时针方向关闭 k 盏连续的灯。
若想终止游戏而非执行操作,请输出一行,仅含一个整数 0。当此时开启的灯数不少于 R(n) 时,该测试点通过(注意:R(n) 的值及评测结果均不会以任何形式告知你的程序)。此操作不计入操作次数(即,在恰好执行 104 次操作后终止游戏是合法的)。
为获得正确评测结果,你的程序应在输出 0 后立即终止,或在收到回复 −1 后立即终止。
每次输出操作后,请务必刷新输出缓冲区。
输入输出样例
输入#1
3
输出#1
0
输入#2
4 1
输出#2
2 1 3 0
说明/提示
When n=3, any John's move can be reversed, thus R(3)=0, and terminating the game immediately is correct.
R(4)=1, and one strategy to achieve this result is shown in the second sample case.
Blank lines in sample interactions are for clarity and should not be printed.
当 n=3 时,约翰的任意一步操作均可被逆转,因此 R(3)=0,此时立即终止游戏是正确的。
R(4)=1,一种可实现该结果的策略如第二个样例交互所示。
样例交互中的空行仅为提高可读性,不应输出。
输入解题思路,AI测评打分。不知道怎么写?