2020杭电多校第二场补题

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;
}

猜你喜欢

转载自www.cnblogs.com/Emcikem/p/13374391.html