#P15565. [Nsi2025十年级]Survey相互责任
[Nsi2025十年级]Survey相互责任
题目描述
Hristo 所在公司的所有员工分为诚实员工和腐败员工,并且每名员工都知道谁属于哪一类。
一天,公司迎来了检查委员会。所有员工围坐在一张圆桌旁,每个人都收到了同一个问题:
“在你右侧接下来的 名员工中,有多少名腐败员工?”
所有诚实员工都会给出正确答案。腐败员工则试图误导检查人员,并且总是给出一个与真实答案恰好相差 的回答。也就是说,如果右侧接下来的 名员工中有 名腐败员工,那么腐败员工会回答 或 。但回答不能小于 :如果右侧全是诚实员工,那么唯一可能的错误答案是 。
请编写程序 survey,根据问卷结果,求出公司中腐败员工数量的最小可能值和最大可能值。
实现细节
你需要在程序中实现如下函数:
pair<int, int> corrupt(int n, int k, const std::vector<int>& answers)
- 该函数会被评测程序调用恰好一次;
- 表示围坐在圆桌旁的人数;
- 表示每个人回答时考虑其右侧接下来的多少个人;
answers按圆桌座位顺序给出所有员工的回答;- 函数应返回一个二元组:
- 第一个元素为腐败员工数量的最小可能值;
- 第二个元素为腐败员工数量的最大可能值。
实现该函数的程序中可以包含其他必要的代码和辅助函数,但不应包含 main 函数,也不应从标准输入读取或向标准输出写入。
数据范围
其中 表示第 名员工的回答。
子任务
| 子任务 | 分值 | 依赖子任务 | ||
|---|---|---|---|---|
| 1 | 20 | - | ||
| 2 | 30 | |||
| 3 | 50 | 1, 2 |
只有通过某个子任务的所有测试点,才能获得该子任务分数。
样例
| 评测程序调用 | 返回值 |
|---|---|
corrupt(4, 1, {0, 0, 0, 0}) |
{0, 4} |
corrupt(5, 1, {1, 1, 1, 1, 0}) |
{2, 3} |
本地测试
题目提供了 grader.cpp,你可以将其与你的程序一起编译进行本地测试。
运行时,程序将从标准输入读取:
- 第一行: 和 ;
- 第二行:
answers[i],其中 。
程序会在标准输出的一行中输出两个整数:最小可能腐败人数和最大可能腐败人数,按此顺序输出。