今天做浙大的校赛的时候见到的题目,被队友找规律秒掉了,但是听大牛说他是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;
}