#P10847. [EGOI 2024] Garden Decorations / 花园装饰
[EGOI 2024] Garden Decorations / 花园装饰
题目背景
Day 1 Problem D.
题面译自 EGOI2024 gardendecoration。翻译来自于 ChatGPT 并进行人工校对,若有误请联系 rui_er。
7s 1GB
本题是一道通信题,你的程序会被多次执行。
题目描述
每天上学和回家的时候,Detje 都会沿着一条有 栋房子的街道行走,这些房子从 编号到 。目前,第 号房子住着第 号居民。为了换个环境,居民们决定互换房子。将要搬进第 号房子的人是目前住在第 号房子的人。
每栋房子花园里都有一只鸟雕像。这些雕像有两种状态:它们的翅膀要么是展开的(像是在飞翔),要么是闭合的(像是在地上站立)。居民们对他们的鸟雕像的样子有很强的偏好。目前,第 号房子前的鸟雕像是第 号居民喜欢的状态。居民们拒绝搬到一个雕像未设置为他们喜欢的状态的房子里。Detje 想帮他们调整鸟雕像的状态,以便他们能够搬家。
为此,她做了以下事情:每次她沿着街道行走(无论是上学还是回家),她会逐个观察经过的鸟,并可能调整一些雕像(通过打开或闭合它们的翅膀)。由于她在学校和家里非常忙碌,她不记得之前走过的鸟的状态。幸运的是,她写下了 列表,所以她知道哪个居民要搬到哪里。
帮助 Detje 设计一个策略,告诉她应该调整哪些鸟雕像,以便将雕像调整到居民们喜欢的状态。她最多可以沿街道行走 60 次,但为了获得更高的分数,她应该减少行走的次数。
交互方式
本题是一道通信题,你的程序会被多次执行。
在每次运行中,你应首先读取一行包含两个整数 和 ,分别是行走的索引和房子的数量。在程序的第一次运行中 ,第二次运行中 ,依此类推(下面会详细说明)。
在输入的第二行,有 个整数 ,表示将要搬进第 号房子的人目前住在第 号房子。 的值形成一个排列:即 列表中每个数从 到 都只出现一次。注意,居民可以选择不搬家,即 是允许的。
居民们只会互换一次房子。这意味着对于一个固定的测试用例, 的值和 列表在程序的所有运行中都是相同的。
第一次运行。
在程序的第一次执行中,。在这次运行中,你应输出一个整数 (),表示 Detje 想要沿街道走多少次。然后程序应退出。之后,程序将再次执行 次。
后续运行。
在程序的下一次运行中,;再下一次中 ;依此类推,直到最后一次运行,。
在读取 和 之后,Detje 开始沿街道行走。
-
如果 是奇数,Detje 从家走到学校,她会按 的顺序经过房子。
你的程序现在应读取一行包含 ,它是当前第 号房子前雕像的状态, 表示闭合, 表示展开。读取 之后,你应输出一行,包含你想将 设置为的新的状态, 或 。
然后你的程序应读取一行包含 ,即第 号房子前雕像的状态;并输出 的新状态。对于所有 栋房子,这个过程继续进行。Detje 经过最后一栋房子(即读取并写入 )后,你的程序应退出。
注意:你的程序只能在写入 的新值后读取下一个 的值。
-
如果 是偶数,Detje 从学校走到家,她会按 的顺序经过房子。即你从读取并写入 开始,然后是 ,依此类推直到 。
当 时,输入值 是鸟雕像的初始状态(也是居民们喜欢的状态)。当 时,输入的 值是上一次运行程序时设置的状态。
最终,在程序的最后一次运行后,对于所有 ,值 必须等于初始的 值,否则程序会被判定为 WA。
详细信息。
如果 次单独运行程序的总运行时间超过时间限制,程序会被判定为 TLE。
输出每一行后,请确保刷新标准输出;否则,程序可能会被判定为 TLE。在 Python 中,只要使用 input() 读取行,就会自动刷新。在 C++ 中,cout << endl; 除了打印换行符外还会刷新;如果使用 printf,请使用 fflush(stdout)。
输入格式
见【交互方式】部分。
输出格式
见【交互方式】部分。
0 6
1 2 0 4 3 5
2
1 6
1 2 0 4 3 5
1
1
0
0
1
0
0
1
0
1
1
1
2 6
1 2 0 4 3 5
1
1
1
0
1
0
0
0
1
1
0
1
提示
样例解释
题面中的三个样例对应同一个测试点的三次交互过程。
在样例中,我们得到了以下房屋中的人们的排列:

样例程序第一次运行时(),它输出 ,这意味着 Detje 将沿着街道走两次(并且程序将再运行两次)。在第一次行走之前,花园里的鸟的状态如下所示:

然后程序以 运行,表示 Detje 的第一次行走。她从左边开始一个一个地经过鸟,并可能改变它们的状态。样例程序在看到第 只鸟之前,必须输出第 只鸟的状态。
Detje 到达学校后,鸟的状态如下所示:

在程序的最后一次运行()中,Detje 从学校回家。记住,在这种情况下,她会从右向左经过鸟,并按这个顺序处理它们!这意味着她需要在看到第 只鸟之前确定第 只鸟的状态。
她完成行走后,鸟现在看起来如下所示:

确实,这是正确的配置。例如,鸟雕像 (即从左数第四个)是打开的(现在 ),这正确的,因为人 将搬到那里(),并且他们原本有一个打开的鸟雕像(原本 )。
数据范围
对于全部数据,,你至多使用 轮。
- 子任务一(至多 分):。
- 子任务二(至多 分):。
- 子任务三(至多 分):。
- 子任务四(至多 分):。
- 子任务五(至多 分):。
- 子任务六(至多 分):无特殊限制。
评分方式
对于每个你的程序正确解决的子任务,你会根据以下公式获得分数:
$$\textrm{score}=S_g\cdot\left(1-\frac{1}{2}\log_{10}(\max(W_g,3)/3)\right)$$其中 是这个子任务的满分, 是你的程序在这个子任务的所有测试点中使用的最大轮数。你每个子任务的得分将被取整到最接近的整数。
下面是得分关于 的函数图象。要想得到满分,你需要用不超过 轮解决每个测试点。
