難道2分真的要卡死我麼 ZOJ3702

今天做浙大的校賽的時候見到的題目,被隊友找規律秒掉了,但是聽大牛說他是2分搞過去的。於是我也再用2分寫一發。但是還是WA了好久,究其原因並不是2分的錯,而是我輸出格式少了換行。

如果要用半開半閉區間的二分,就一直用吧。這道題是個二分查找,當做查上界或者查下界都可以做,畢竟相等的只有一個。

最後的正確答案就是你的閉區間那部分。就有包括等號的那部分。

#include<stdio.h>
#include<string.h>

typedef long long LL;

const int MAX_N=1000000;

LL f[100];

LL search(int f1,int t)
{
	f[1]=f1;
	for(int i=2;i<=t;i++)
	{
		f[i]=f[i-1]+f[i-2];
	}
	return f[t];
}
int main()
{
	int cas;
	scanf("%d",&cas);
	f[0]=1;
	while(cas--)
	{
		int pos,v,t;
		scanf("%d%d%d",&pos,&v,&t);
		int lb=1,ub=1000003;
		int ans=-1;
		while(ub-lb>1)
		{	
			int mid=(ub+lb)>>1;
			int result=search(mid,pos);
			if(result<=v)
				lb=mid;
			else
				ub=mid;
		}
		if(search(lb,pos)==v)
			ans=lb;
		if(ans!=-1)
		{
			printf("%lld\n",search(ans,t));
		}
		else
		{
			printf("-1\n");
		}
	}
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章