今天做浙大的校賽的時候見到的題目,被隊友找規律秒掉了,但是聽大牛說他是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;
}