codeforces1103B 二分交互题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liufengwei1/article/details/86604498

手速场,半小时做完就开始挂机了。

群里有人提出了用v和2v去比较

然后我想起了曾经一道交互题是拿二进制去试探,先加大的,再加小的,看行不行。

这样如果如果v%a<2v%a,那么a>2v,如果输出x,那么v<a<2v

就可以确定a的上下区间,分别是v和2v。

然后再去二分mid,每次输出v和mid,找到v%a<mid%a的mid的最大值。那么mid+1就是a

当时寝室4个人中,我先说二进制试探,然后lts已经差不多完全想出来了,然而wa on test 3.确实确定上下区间后没考虑清楚接下来怎么办。。。感觉再冷静下来想一想就差不多了。还是菜。。。

#include<bits/stdc++.h>
using namespace std;

int main()
{
	string s;
	cin>>s;
	while(s!="end")
	{
		int l=0,r=1;
		printf("? %d %d\n",l,r);
		cin>>s;	
		while(s=="y")
		{
			l=r,r<<=1;
			printf("? %d %d\n",l,r);
			fflush(stdout);
			cin>>s;
		}
		int mid;
		while(l+1<r)
		{
			mid=(l+r)>>1;
			printf("? %d %d\n",l,mid);
			fflush(stdout);
			cin>>s;
			if(s=="y")
				l=mid;
			else
				r=mid;
		}
		printf("! %d\n",l+1);
		fflush(stdout);
		cin>>s;
	}
}

猜你喜欢

转载自blog.csdn.net/liufengwei1/article/details/86604498