令修改的那一位为 k,则要找到这个 k 满足 A×B = C +Fk,其中 k ≤ 2000001。假设存在
一个 P 满足 F1, F2, . . . , F2000001 模 P 两两不同余,则可以根据 Fk mod P = (A×B C) mod P
得到 k。事实上取 P = 264,即自然溢出就是满足条件的。
#include<cstdio>
typedef unsigned long long ull;
const int N=3000005;
int Case,i;
ull A,B,C,f[N];
inline ull read()
{
int n,i,x;
ull ret=0;
scanf("%d",&n);
for(i=1; i<=n; i++)
{
scanf("%d",&x);
if(x)
ret+=f[i];
}
return ret;
}
int main()
{
for(f[1]=1,f[2]=2,i=3; i<N; i++)
f[i]=f[i-1]+f[i-2];
scanf("%d",&Case);
while(Case--)
{
A=read();
B=read();
C=read();
A*=B;
for(i=1; C+f[i]!=A; i++);
printf("%d\n",i);
}
}