思路:求出A和B和C的值,A*B与C之差在斐波那契数列中去找缺少的那一个,最后输出即可,注意数据的取值范围。
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int N=3000005;
int T;
ull A,B,C;
ull f[N];
inline ull add(int m){
ull sum=0;
for(int j=1;j<=m;j++){
int mm;
scanf("%d",&mm);
if(mm){
sum+=f[j];
}
}
return sum;
}
int main(){
f[1]=1,f[2]=2;
for(int i=3;i<N;i++){
f[i]=f[i-1]+f[i-2];
}
scanf("%d",&T);
for(int i=0;i<T;i++){
int a,b,c;
scanf("%d",&a);
A=add(a);
scanf("%d",&b);
B=add(b);
scanf("%d",&c);
C=add(c);
ull CC=A*B;
int j;
for(j=1;C+f[j]!=CC;j++);
printf("%d\n",j);
}
return 0;
}