#1268. Innovative Business
Innovative Business
题目描述
有 个元素,编号 ,每一对元素之间的大小关系是确定的,关系具有反对称性,但不具有传递性。
注意:不存在两个元素大小相等的情况。
也就是说,元素的大小关系是 个点与 条有向边构成的任意有向图。
然而,这是一道交互式试题,这些关系不能一次性得知,你必须通过不超过 次提问来获取信息,每次提问只能了解某两个元素之间的关系。
现在请你把这 个元素排成一行,使得每个元素都小于右边与它相邻的元素。
你可以通过我们预设的 bool
函数 compare
来获得两个元素之间的大小关系。
例如,编号为 和 的两个元素,如果元素 小于元素 ,则 compare(a,b)
返回 ,否则返回 。
将 个元素排好序后,把他们的编号以数组的形式输出,如果答案不唯一,则输出任意一个均可。
为了适配 OJ,本题交互格式进行修改。改为 I/O 交互。
bool compare(int a, int b)
{
cout << "? " << a << ' ' << b << endl;
bool t;
cin >> t;
return t;
}
请在代码里填写此函数。擅自修改内容后果自负。
输入格式
交互库会先给出一个正整数 表示元素数量。
之后的每次回答,交互库会返回 或 表示大小关系。 代表 , 代表 。
输出格式
你可以使用题面中的 compare
函数进行提问。如要自己编写询问,询问格式为 ? a b
。
输出答案之前请先给出一个感叹号 !
。之后用空格分隔这 个编号。具体见样例 #1.
3
1
0
0
? 1 2
? 1 3
? 2 3
! 3 1 2
提示
测试数据满足 。