只有N+M次询问,所以可以先找到可能在第几行,再找在第几列。
例如对于询问(i, M),如果比K大,那么只有可能在i+1到n行(i++),如果比K小,那么只可能在该行(我们是从第一行开始询问的),这是最多只要再询问M次就可以了,加上N行的询问刚好N+M次。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int T,n,m,i,j,k;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&m,&k);
bool flag = false;
int M = n+m;
i = 1;
j = m;
int num;
while(M--)
{
printf("%d %d\n",i,j);
fflush(stdout);scanf("%d",&num);
if(num==k)
{
flag = true;
break;
}
if(num < k)i++;
else j--;
if(i > n || j < 1)break;
}
if(flag)
printf("YES\n");
else printf("NO\n");
fflush(stdout);
}
return 0;
}