1006 The Oculus
HASH做法,对于每一个值,赋予一个HASH值,然后判断C缺的是哪一个就行了
HASH的方法:
- 一般是采用一个mod值,然后除以mod值就行了
- 自然溢出,设为ll,让他自然地溢出,不做任何运算
- 双HASH,设两个mod值
#include <iostream>
#include <cstdio>
#define ll long long
using namespace std;
const int N = 2e6 + 5;
ll fib[N], CCC[N];
void solve(){
int n, m, k;
ll x, A = 0, B = 0, C = 0, CC = 0;
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
scanf("%lld", &x);
A = A + x * fib[i];
}
scanf("%d", &m);
for(int i = 1; i <= m; i++) {
scanf("%lld", &x);
B = B + x * fib[i];
}
C = A * B ;
scanf("%d", &k);
for(int i = 1; i <= k; i++) {
scanf("%lld", &CCC[i]);
CC = CC + CCC[i] * fib[i];
}
for(int i = 1; i <= k; i++) {
if(CCC[i] == 0) {
if(CC + fib[i] == C) {
printf("%d\n", i);
return;
}
}
}
}
int main(){
fib[0] = fib[1] = 1;
for(int i = 2; i < N; i++)
fib[i] = (fib[i - 1] + fib[i - 2]);
int t;
scanf("%d", &t);
while(t--) solve();
return 0;
}