P11344 [KTSC 2023 R1] 会议室(无法评测)
题目描述
$N$ 名魔法师聚在一起,为了增进友谊,想要举行共享彼此魔法的郊游。在这个郊游会上玩一天有趣的游戏。
游戏在一个巨大的会议室里进行。这个会议室有一张有 $N$ 个座位的圆桌。圆桌上的每个位置都长得一样,魔法师也都长得一样,无法区分彼此。魔法师们在游戏进行中什么也说不出来。
游戏分三个阶段进行,每个阶段如下:
- 早上魔法师们围坐在圆桌旁。每个位置都放着一张空白纸和一张写有 $0$ 以上 $N-1$ 以下整数的纸。每张纸上的整数各不相同。魔法师可以在圆桌上看到自己和坐在自己右边的人的纸上写着的整数。以此为基础,向导在空白纸上写 $0$ 以上 $10^9$ 以下的整数。这个整数写得很小心,只有自己才能看到。之后,把刚才写了整数的纸折起来放在座位上,拿着写有第一个位置上的整数的纸离开会议室。
- 中午魔法师们围坐在圆桌旁。每个座位上都放着一张空纸和一张早上自己写的纸。魔法师在圆桌上可以看到自己和坐在自己左边和右边的人的纸上写着的整数。以此为基础,魔法师在空白纸上写 $0$ 以上 $10^9$ 以下的整数。这个整数写得很小心,只有自己才能看到。之后,把刚才写了整数的纸折起来放在座位上,拿着早上写了数的纸离开会议室。
- 晚上魔法师们围坐在圆桌旁。每个座位都放着一张空纸和一张中午自己写的纸。魔法师们可以在圆桌上看到自己和坐在自己左边和右边的人的纸上写着的整数。以此为基础,魔法师在空白纸上写 $0$ 以上 $40$ 以下的整数。这个整数写得很小心,只有自己才能看到。之后,把刚才写了整数的纸折起来放在座位上,拿着中午写了数的纸离开会议室。
离开会议室后,手中的纸会以魔法的力量消失,你会忘记在会议室所做的一切。早上,中午,晚上每个魔法师坐的位置都是一样的。魔法师们不知道 $N$,但知道是 $10\leq N \leq 10^5$。游戏结束后,野游的运营人员会把放在座位上的纸都放起来。为了让巫师们赢得游戏,圆桌上相邻位置的纸上写的数字必须不同。另外,游戏结束时(即晚上结束),最好在纸上写上尽可能小的数字。魔法师们在游戏进行中什么都不能说,但他们可以达成协议,在游戏进行之前使用共同的策略。你必须替巫师们想出一个策略,最终把尽可能小的数字写在纸上。
---
你需要实现以下函数。
```cpp
void init();
```
- 该函数只被调用一次,在调用其他所有函数之前被调用。
- 如果以后有调用函数所需的前处理或全局变量设置,可以在该函数中实现。
```cpp
int morning(int my_num, int right_num);
```
- `my_num`:早上魔法师座位上纸上的整数
- `right_num`:早上魔法师右边纸上的整数
- 该函数必须返回一个整数,该整数将由魔法师在早上写到空白纸上。此函数的返回值必须在 $0$ 以上 $10^9$ 以下。
- 此函数的返回值必须仅依赖于 `my_num` 和 `right_num` 的值。
- 函数最多被调用 $2\times 10^6$ 次。
```cpp
int afternoon(int left_num, int my_num, int right_num);
```
- `left_num`:中午魔法师右边纸上的整数
- `my_num`:中午魔法师座位上纸上的整数
- `right_num`:中午上魔法师右边纸上的整数
- 该函数必须返回一个整数,该整数将由魔法师在早上写到空白纸上。此函数的返回值必须在 $0$ 以上 $10^9$ 以下。
- 此函数的返回值必须仅依赖于 `left_num`,`my_num` 和 `right_num` 的值。
- 函数最多被调用 $2\times 10^6$ 次。
```cpp
int evening(int left_num, int my_num, int right_num)
```
- `left_num`:晚上魔法师左边纸上的整数
- `my_num`:晚上魔法师座位上纸上的整数
- `right_num`:晚上魔法师右边纸上的整数
- 该函数必须返回一个整数,该整数将由魔法师在早上写到空白纸上。此函数的返回值必须在 $0$ 以上 $40$ 以下。
- 此函数的返回值必须仅依赖于 `left_num`,`my_num` 和 `right_num` 的值。
- 函数最多被调用 $2\times 10^6$ 次。
不能在提交的源代码的任何部分运行 I/O 函数。
`morning`、`afternoon` 和 `evening` 函数的返回值必须仅依赖于给定参数的值。如果多次以相同的参数值调用函数时返回不同的值,则无论游戏胜负如何,都将被视为错误答案。
每个测试案例由多个(1 个以上)独立游戏组成。虽然不能保证 `morning`、`afternoon` 和 `evening` 函数按顺序调用,但可以保证游戏会基于函数的返回值按照题目背景中给出的方式进行。
在每个测试案例中,您的程序运行两次。在比赛系统上,执行时间由两次执行程序的执行时间之和来衡量,内存使用量也由两次执行程序的内存使用量之和来衡量。时间限制和内存限制基于两次运行结果的总和。`morning`、`afternoon` 和 `evening` 函数的调用次数约束条件也是以两次执行中的调用次数之和为基准显示的。在实际提交时,最坏的情况下,可以假设评分程序基本消耗的时间在 2 秒以内。
输入格式
无
输出格式
无