为什么我不喜欢函数交互:

其实这个题很简单。注意到限制给的很松,所以随便排除一些一定不合法的位置就可以过。考虑把相邻两个元素分为一组比较,把大的那个放到 数组中,小的那个放到 数组中。
此时 数组中所有元素都一定不是最大值, 数组中所有元素都一定不是最小值。直接在两个数组中线性问出最大 / 最小值即可,容易证明这样满足操作次数限制,可以通过。
#include <vector>
int Compare(int X, int Y);
void Answer(int X, int Y);
void Ramen(int n)
{
std::vector<int> v1, v2;
for (int i = 0; i < n; i += 2)
{
if (i < n - 1)
{
if (Compare(i, i + 1) == 1)
v1.emplace_back(i), v2.emplace_back(i + 1);
else
v1.emplace_back(i + 1), v2.emplace_back(i);
}
else
{
v1.emplace_back(n - 1);
v2.emplace_back(n - 1);
}
}
int i1 = v1[0], i2 = v2[0];
for (int i = 1; i < v1.size(); ++i)
if (Compare(i1, v1[i]) == -1)
i1 = v1[i];
for (int i = 1; i < v2.size(); ++i)
if (Compare(i2, v2[i]) == 1)
i2 = v2[i];
Answer(i2, i1);
}
喜欢的话,留下你的评论吧~