码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 6768 The Oculus

时间:2020-07-24 22:08:30      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:一个   color   scan   mes   长度   print   name   printf   代码   

The Oculus

问题描述:

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

 

 

 

HDU 6768 The Oculus

标签:一个   color   scan   mes   长度   print   name   printf   代码   

原文地址:https://www.cnblogs.com/grisaia/p/13373997.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!