链接:https://ac.nowcoder.com/acm/contest/71/C
来源:牛客网
题目描述
小W在计算一个数列{An},其中A1=1,A2=2,An+2=An+1+An。尽管他计算非常精准,但很快他就弄混了自己的草稿纸,他找出了一些他计算的结果,但他忘记了这些都是数列中的第几项。
输入描述:
每行包括数列中的一项Ak(k<=100000)。
总行数T<=30。
输出描述:
对于每一项Ak,输出一行包括一个正整数k表示输入中数是数列的第几项。
示例1
输入
复制
2 3 5 8 13
输出
复制
2 3 4 5 6
第100000 14406452726835625053
unsigned long long 为
1844674407370955161
unsigned __int64 范围为 18446744073709551615
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long lli;
const int MAXN = 1e5;
lli aa[MAXN];
map<lli,int> mp;
int main()
{
aa[1]=1;
aa[2]=2;
mp[1]=1;
mp[2]=2;
for(int i=3;i<=MAXN;i++)
{
aa[i]=(aa[i-1]+aa[i-2]);
mp[aa[i]]=i;
}
//cout<<aa[100000]<<" ds"<<endl;
lli cn;
string ss;
while(cin>>ss)
{
lli ans=0;
for(int i=0;i<ss.size();i++)
{
ans=(ans*10+ss[i]-'0');
}
printf("%d\n",mp[ans]);
}
return 0;
}