求调 60pts WA(注:此贴为整活
查看原帖
求调 60pts WA(注:此贴为整活
327512
rabbitohh楼主2022/8/21 11:01

(就当是为各位提供水部分分的思路

#include<cstdio>
#include<iostream>
#include<ctime>
using namespace std;
int a[(1<<20)+1];
int find(int x,int len)
{
	int l=0,r=len-1,mid,cnt=0,w;
	while(l<r)
	{
		cnt++;
		w=rand()%2;
		mid=(l+r+w)/2;
		if(a[mid]-w<x) l=mid+!w;
		else r=mid-w;
	}
	return cnt;
}
int main()
{
	srand(time(0)+clock());
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}
	int q;
	cin>>q;
	for(int i=1;i<=q;i++)
	{
		int x;
		cin>>x;
		int ans=0x3f3f3f3f;
		for(int j=1;j<=40000;j++)
		{
			ans=min(ans,find(x,n));
		}
		cout<<ans<<'\n';
	}
	return 0;
}
2022/8/21 11:01
加载中...