-
B - Fibonacci Sequence
URAL - 1133 - 题意: 满足Fibonacci条件的整数序列:Fi+2=Fi+2+Fi (对于一切的i都满足) 。
- 写一个程序,对给定的i, Fi, j, Fj, n,计算Fn,Fi,Fj是序列中的两个成员
- 思路:试了一发解方程的,wa可能方程过程中数据爆longlong。
- 二分枚举 已知的靠左的下一个是谁,然后就可以递推求解了
-
#include<bits/stdc++.h> using namespace std; #define ll long long #define maxn 2345 ll x,y,a,b,n,l,r,mid; map<int,int>ans; int ok(ll sb) { ll sp=x; ans[a+1]=sb; for(int i=a+2; i<=b; i++) { sp+=sb; swap(sp,sb); if(sb>2e9)return 1; else if(sb<-2e9)return -1; } if(sb>y)return 1; if(sb<y)return -1; ans[a]=x; if(n<a) for(int i=a-1; i>=n; i--) ans[i]=ans[i+2]-ans[i+1]; else for(int i=a+2; i<=n; i++) ans[i]=ans[i-2]+ans[i-1]; return 0; } int main() { scanf("%lld%lld%lld%lld%lld",&a,&x,&b,&y,&n); if(a>b) { swap(a,b); swap(x,y); } l=-2*1e9; r=2*1e9; while(l+1<r) { mid=(l+r)/2; if(ok(mid)>0) r=mid; else if(ok(mid)<0) l=mid; else { printf("%d\n",ans[n]); break; } } return 0; }