题目链接:https://www.nowcoder.com/acm/contest/91/F
题意:求第N个符合条件X^2X=3X的X。N<=10的12次方。
解题思路:我刚开始想到最粗暴的方法就是打表,但是因为数据量太大就死在了存储问题上,10的12次方个数据无法用数组存储。后经高人指点,知道了对于数据量很大的问题一般都不能存储,需要找规律,通过其他方法来解决。所以这个问题的正确解决思路就是打表找规律,于是乎找到了a[i]=a[i-1]+a[i-2];a[i]表示i及i位以前符合条件的个数。
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
LL a[65];
LL n,sum;
int main()
{
a[0]=a[1]=1;
for(int i=2;i<=64;i++)
{
a[i]=a[i-1]+a[i-2];
}
int t;
cin>>t;
while(t--)
{
cin>>n;
sum=0;
while(n>0)
{
int ard = upper_bound(a+1,a+64,n)-a-1;//upper_bound(a+1,a+64,n)查找n介于它和他前一个数据之间
n -= a[ard];
sum += 1LL <<(ard-1);//确定第ard位为1
}
cout<<sum<<endl;
}
}