http://acm.hdu.edu.cn/showproblem.php?pid=6768
题意:大数由很多位的斐波那契数相加表示,大数
A
∗
B
A*B
A∗B用
C
C
C+某一位斐波那契数相加表示,求哪一位。
思路:直接做看起来是什么数学题,实际上直接哈希一下就好了。
#include<bits/stdc++.h>
using namespace std;
const int maxn=2000000+100;
typedef unsigned long long ull;
int T,n;
int c[maxn];
ull f[maxn];
ull a,b,ans;
int main()
{
//freopen("input.in","r",stdin);
cin>>T;
f[1]=1,f[2]=2;
for(int i=3;i<maxn;i++)f[i]=f[i-1]+f[i-2];
while(T--)
{
a=b=0;
int x;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
a+=x*f[i];
}
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
b+=x*f[i];
}
ans=a*b;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
c[i]=x;
ans-=x*f[i];
}
for(int i=1;i<=n;i++)if(c[i]==0)
{
if(ans==f[i]){printf("%d\n",i);break;}
}
}
return 0;
}