#L3649. 「2021 集训队互测」WereYouLast
「2021 集训队互测」WereYouLast
注意事项
由于编译上的问题,请在你的代码前加入如下语句:
#include "wereyoulast.h"
「影响」是指,只要某个位置被 query 或者 modify 了那么就算被影响了;禁止在 WereYouLast 中递归调用自己。
题目描述
这是一道交互题。
在本题中,你不需要实现主函数。你需要实现一个函数
bool WereYouLast(int n, int m)
这个函数会被调用恰好 次,你需要正确地返回这是否是最后一次调用。
交互库会为你的程序提供 个全局 bool 存储单元,它们的编号为 ,初始时的值为 False。你的程序可以调用如下函数:
bool query(int pos):该函数会返回第 个存储单元的值。void modify(int pos, bool v):该函数会将第 个存储单元的值修改为 。
记在第 次调用中,你的程序的 query/modify 操作影响到了 个不同的位置,你需要最小化 ,在某些测试点中,最小化 也可以获得一定的分值。
注意:你的程序不能以任何自定义的形式在多次调用之间交换信息,这些被禁止的形式包括但不限于使用全局变量(允许当常量用的全局变量(即,你没有通过修改全局变量来传递信息)),或是含有 static 关键词的变量。禁止任意形式的攻击交互库,这些被禁止的形式包括但不限于修改交互库中的全局变量,或者在代码中使用主函数。得分程序可能会被人工检查,选手也可以对进行被禁止行为的程序进行申诉,若行为属实,将取消对应程序在本题的成绩。
注意:为了防止过度卡评测,在一次 WereYouLast 的调用中,你不能对同一个位置进行多于 次的 query 或者多于 次的 modify,如果在一次 WereYouLast 的调用中你的程序对一个位置调用了多于 次的 query 或者多于 次的 modify,超出上限的操作将会被判为 Invalid Operation,你的程序会被判为 Wrong Answer。
输入格式
可执行文件从标准输入中读取数据。
输入包含一行两个整数 表示程序调用次数,和全局存储单元的个数。
如何测试你的程序
下发文件中包含一个参考程序 sample.cpp。
下发样例交互库 grader.cpp,设你的代码叫做 code.cpp 你可以采用如下命令进行编译:
g++ code.cpp -o code grader.cpp -O2 -std=c++11
你不能通过更改交互库得分。
你可以认为,最终测试的交互库与样例交互库的运行时间相差在 以内,空间限制相差在 以内。
评分标准
每个测试点有固定的 和若干个评分参数 。
如果你的程序不能正确地完成任务,你将得到 分。
在完成任务的基础上,
- 在测试点 1 中, 每 一个评分参数就会得到 分。
- 在测试点 2 中, 每 一个评分参数就会得到 分, 每 一个评分参数就会得到 分。
- 在测试点 3 中, 每 一个评分参数就会得到 分, 每 一个评分参数就会得到 分。
- 在测试点 4 中, 每 一个评分参数就会得到 分, 每 一个评分参数就会得到 分。
数据范围
| 测试点编号 | 测试点总分 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 10 | 10 | |||||||||||
| 2 | 20 | 14 | 13 | 12 | 11 | 9 | 8 | 7 | 6 | ||||
| 3 | 30 | ||||||||||||
| 4 | 40 | ||||||||||||