这是一道交互题。
本题只支持 C++ 提交,建议使用 C++17。
提交时不需要包含 haru.h 头文件。
为了确保程序正常编译,你需要在你提交的程序开头加上如下函数声明语句:
std::vector<long long> query(const std::vector<std::vector<int>> &U,const std::vector<std::vector<int>> &V);
bool guess(const std::vector<int> &U, const std::vector<int> &V, long long x);
如遇评测问题,请联系搬题人。
走路要注意脚下,不要边走路边玩手机,以防进掉水里;
去外面玩注意天气,不要在雨天荡秋千,以防感冒。
这是一道交互题,仅支持 C++ 提交。
紗凪有一个隐藏的正整数数组 (),定义一颗点集为 的树 的直径 为,当我们把第 个点附以点权 时,最大点权和路径的点权和。
你需要在 次查询和 次猜测之内确定至少 个 :
- 查询:询问一棵树 ,交互库会返回 。这个询问是离线的,即你要进行完所有查询之后才能知道每次查询的答案。
- 猜测:询问一棵树 和正整数 ,交互库会返回 。这个操作询问是在线的,即每次猜测后可以立刻知道结果。
实现细节
你需要引用头文件 haru.h。
你需要实现下面的函数
std::vector<int> haru(int n);
其中 表示 数组的长度。
这个函数需要返回一个长度为 的数组 ,其中最多有 个 表示你不能确定这个 的值,其余元素都在 之内表示你确定这个 的值。
这个函数在一个测试点内可能会被调用多次。
你可以调用以下两个函数:
std::vector<long long> query(const std::vector<std::vector<int>> &U,const std::vector<std::vector<int>> &V);
这个函数对应题目描述中的查询,这个函数只能被调用一次。你需要保证 长度个数相同(记为 ),且每个元素都是一个长度为 的数组,且仅包含 之内的整数。
这个函数会返回一个长度为 的数组,其中第 个数表示考虑 由 ()这些边构成时, 的值。
bool guess(const std::vector<int> &U, const std::vector<int> &V, long long x);
这个函数对应题目描述中的猜测。你需要保证 长度都为 ,且仅包含 之内的整数。
这个函数会返回一个 bool 值表示考虑 由 ()这些边构成时 是否等于 。
你可以查看下发文件中的 grader.cpp,其实现与评测时的交互库几乎一致。
测试程序方式
下发 haru.cpp 是参考实现。你可以在本题目录下使用以下指令来编译你的代码:
g++ grader.cpp haru.cpp -o haru -O2 -std=c++14 -static