题目地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3702
水题;
预处理下,i和j的范围不大;
G[0]=1,只要求出G[1]就可以解,G[i]=x[i-2]+x[i-1]*G[1] (i>=2) x[i]是x[1]=x[2]=1的裴波那契数列 (式子好求,列个表写出前几个找规律就好);
AC代码:
#include<iostream> using namespace std; long long ltsc[22]; int main() { //预处理裴波那契数列 ltsc[0]=ltsc[1]=1; for(int i=2;i<=20;i++) { ltsc[i]=ltsc[i-1]+ltsc[i-2]; } int t; cin>>t; while(t--) { int i,j; long long x,rx;//rx即G[1] bool r=true; cin>>i>>x>>j; if(i==1)rx=x; else { rx=(x-ltsc[i-2]); //判断是否存在G[1] if(rx%ltsc[i-1]==0) { rx/=ltsc[i-1]; r=rx<1?false:true; } else r=false; if(r==false) { cout<<"-1"<<endl; continue; } } cout<<ltsc[j-2]+ltsc[j-1]*rx<<endl;; } }
评论