标签:一个 color scan mes 长度 print name printf 代码
A=∑ai*F[i] B= ∑bi*F[i]
C=A*B=∑ci*F[i]
F[i]是斐波拉契序列,a[],b[],c[]是给的01数组。
由于故意将c[i]的一个数由1变成了0,现在改变的下标是
这道题我真的我当时为什么不看啦!!!!!!
我上一场做了一个斐波拉契的题找过循环节1e9+9的1重复在16666..反正超过给定数组大小。
然后A*B=C那么我们只要先把A B C的值取模1e9+9,在循环c数组长度把0换成1一个个试。相等输出就完事了
我下来补题直接就过了。。好心伤。。。哎。
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 2e6+10; ll f[N]; int C[N]; const int mod = 1e9+9; int main(){ int t,n,m,z; f[0]=f[1]=1; for(int i=2;i<N-5;i++){ f[i]=(f[i-1]+f[i-2])%mod; } scanf("%d",&t); while(t--){ ll a=0,b=0,c=0; int p; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&p); if(p) a=(a+f[i])%mod; } scanf("%d",&m); for(int i=1;i<=m;i++){ scanf("%d",&p); if(p) b=(b+f[i])%mod; } scanf("%d",&z); for(int i=1;i<=z;i++){ scanf("%d",&p); C[i]=p; if(p) c=(c+f[i])%mod; } a=a*b%mod; int pos=0; for(int i=1;i<=z;i++){ if(C[i]==0){ if(a==(c+f[i])%mod){ pos=i; break; } } } printf("%d\n",pos); } }
标签:一个 color scan mes 长度 print name printf 代码
原文地址:https://www.cnblogs.com/grisaia/p/13373997.html