D. Finding Zero 构造,我们设a,b,c里面有最大值和最小值在这里插入代码片 ,然后再从中找到二者
#include<bits/stdc++.h>
using namespace std;
const int N = 2e6+7;
int ask(int a,int b,int x)
{
cout<<"? "<<a<<" "<<b<<" "<<x<<endl;
cin>>x;
return x;
}
void print(int a,int b)
{
cout<<"! ";
cout<<a<<" ";
cout<<b<<endl;
}
signed main()
{
int t;
cin>>t;
while (t--)
{
int n;
cin>>n;
int x = ask(1,2,3);
int a = 1,b = 2,c = 3;
for (int i=4;i<=n;i++)
{
int u = ask(a,b,i);
int v = ask(a,c,i);
if (u<v)
{
if (x<v) b = i,x = v;
}
else
{
if (x<u) c = i,x = u;
}
}
int r = 1;
while (r==a||r==b||r==c) r++;
int A = ask(r,b,c);
int B = ask(a,r,c);
int C = ask(a,b,r);
if (A==x) print(b,c);
else if (B==x) print(a,c);
else print(a,b);
}
}
|