#HK4293. 「KTSC 2020 R2」一二三
「KTSC 2020 R2」一二三
注意事项
在 LibreOJ 上,由于语言限制,目前只支持以下语言的提交:
- C++(标准为 C++ 17 及以上)
请在提交源代码前添加 #include "onetwothree.h"。
题目描述
题目译自 2020년도 국제정보올림피아드 대표학생 선발고사 - 2차 선발고사 T2 「하나 둘 셋」
有一个长度为 的数组 ,这个数组只包含数字 、 和 。我们需要在这个数组中找到尽可能多的满足以下条件的三元组 :
对于数组中的三个索引 ,要么 ,要么 。并且,每个索引最多只能出现在一个三元组中。
例如,给定 ,满足条件的三元组是 和 。 和 。
编写一个程序,在给定数组 的情况下,找到尽可能多的满足条件的三元组 。
你需要实现以下函数:
void maximize(vector<int> A);
- 参数
A是一个长度为N的vector,只包含数字 、 和 。函数maximize需要在数组A中找到尽可能多的满足条件的三元组 ,并且对于找到的每个三元组 ,调用grader的answer(int i, int j, int k)函数一次。如果有多种方法找到最大数量的三元组,可以任选一种。三元组的调用顺序无关紧要。例如,对于问题中的示例,可以先调用answer(0,1,4),再调用answer(2,3,5),也可以先调用answer(2,3,5),再调用answer(0,1,4)。
实现细节
你需要提交一个名为 onetwothree.cpp 的文件,该文件中实现以下函数:
void maximize(vector<int> A);
该函数应按照上述描述工作。当然,你可以创建其他函数并在内部使用。提交的代码不应执行输入输出操作或访问其他文件。
示例评测程序
评测程序按以下格式读取输入:
- 第 行:
- 第 行: 个整数,每个整数为 、 或
评测程序将首先输出 maximize 函数调用 answer(i, j, k) 函数的次数,然后对于每次 answer(i, j, k) 调用,输出 的值。
6
1 2 3 2 3 1
2
0 1 4
2 3 5
以下是样例中函数调用及其结果的顺序:
| 函数调用 | 返回值 |
|---|---|
maximize({1, 2, 3, 2, 3, 1}) |
2 |
answer(0,1,4) |
0 1 4 |
answer(2,3,5) |
2 3 5 |
数据范围与提示
对于所有输入数据,满足:
详细子任务附加限制及分值如下表所示。
| 子任务 | 分值 | 附加限制 |
|---|---|---|
| 无附加限制 |