sdoi.qoj.ac

qoj::sdoi

Time Limit: 2 s Memory Limit: 512 MB Total points: 100 Interactive
[+1]

# 21766. 猜猜看

统计

题目描述

hhz 有一个 1n 的排列,你需要猜出它。

你只能问 hhz 以下两个问题:

  1. 给定不同的两个数 i,j,hhz 会告诉你 aiaj 的大小关系。
  2. 给定两两不同的 i,j,k,hhz 会告诉你 ai,aj,ak 的中位数。

你只能进行 2 次询问 1m 次询问 2,你需要猜出这个排列。

任务

这是一道交互题。

你必须包含头文件 guess.h

你需要实现如下函数:

vector<int> solve(int n, int m);

这个函数只会被调用一次。你需要返回一个长为 n 的数组表示排列。

你可以调用如下过程:

bool query1(int i, int j);

ai<aj 这个函数返回 1,否则返回 0

你需要保证 0i,j<nij

int query2(int i, int j, int k);

这个函数返回 ai,aj,al 的中位数。

你需要保证 0i,j,k<nijjkki

样例交互库

样例交互库以如下格式读入数据:

第一行两个整数 n,m

第二行 n 个整数表示排列。

如果你的交互过程合法且返回排列正确,样例交互库会输出 Accepted cnt=... 表示你使用操作 2 的次数,否则会输出 Wrong Answer [id],你可以查阅交互库以获得具体错误信息。

数据范围与提示

本题捆绑测试。

子任务编号 n m= 分值
1 100 n3 20
2 1000 n2 20
3 3105 3n 30
4 5105 2n 30

对于所有数据,50n51052nm106

交互库自适应。