链接:https://www.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
破题。。。。卡我半天。。。。
ac代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#define ull unsigned long long
using namespace std;
unsigned long long s[100003];
map<unsigned long long, int> mp;
int n;
unsigned long long t;
char str[100003];
inline unsigned long long getnum()
{
int pos=0;
long long now=0;char ch=str[pos++];
while(ch>='0' && ch<='9'){now=(now<<3)+(now<<1)+ch-'0';ch=str[pos++];}
return now;
}
int main()
{
s[1]=1;
s[2]=2;
mp[2]=2;
mp[1]=1;
for (int i=3;i<=100000;i++)
{
s[i]=(s[i-1]+s[i-2]);
mp[s[i]]=i;
}
while (scanf("%s",str)!=EOF) printf("%d\n",mp[getnum()]);
return 0;
}