数论 + 哈希 - The Oculus - HDU 6768
2020 Multi-University Training Contest 2
题意:
- { }
Sample Input
1
3 1 0 1
4 0 0 0 1
6 0 1 0 0 0 1
Sample Output
4
数据范围:
分析:
注意:
双模数:
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#define ll long long
#define P pair<int,int>
#define x first
#define y second
using namespace std;
const int N=2e6, mod1=805306457, mod2=201326611;
int A[N+10],B[N+10],C[N+10];
P f[N+10];
void Init()
{
f[1].x=f[1].y=1,f[2].x=f[2].y=2;
for(int i=3;i<=N+5;i++)
{
f[i].x=(f[i-1].x+f[i-2].x)%mod1;
f[i].y=(f[i-1].y+f[i-2].y)%mod2;
}
}
int add_mod(int a,int b,int mod)
{
ll t=0;
t=a+b;
if(t>=mod) t%=mod;
return t;
}
int main()
{
Init();
int T,n1,n2,n3;
cin>>T;
while(T--)
{
P a,b,c;
int a1=0,a2=0,b1=0,b2=0,c1=0,c2=0;
scanf("%d",&n1);
for(int i=1;i<=n1;i++)
{
scanf("%d",&A[i]);
if(A[i])
{
a1=add_mod(a1,f[i].x,mod1);
a2=add_mod(a2,f[i].y,mod2);
}
}
a={a1,a2};
scanf("%d",&n2);
for(int i=1;i<=n2;i++)
{
scanf("%d",&B[i]);
if(B[i])
{
b1=add_mod(b1,f[i].x,mod1);
b2=add_mod(b2,f[i].y,mod2);
}
}
b={b1,b2};
scanf("%d",&n3);
for(int i=1;i<=n3;i++)
{
scanf("%d",&C[i]);
if(C[i])
{
c1=add_mod(c1,f[i].x,mod1);
c2=add_mod(c2,f[i].y,mod2);
}
}
c={c1,c2};
int d1=(ll)a.x*b.x%mod1;
int d2=(ll)a.y*b.y%mod2;
for(int i=1;;i++)
if(f[i].x==(d1-c.x+mod1)%mod1 && f[i].y==(d2-c.y+mod2)%mod2)
{
printf("%d\n",i);
break;
}
}
return 0;
}
自然溢出:
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#define ll unsigned long long
using namespace std;
const int N=2e6;
int A[N+10],B[N+10],C[N+10];
ll f[N+10];
void Init()
{
f[1]=1,f[2]=2;
for(int i=3;i<=N+5;i++) f[i]=f[i-1]+f[i-2];
}
int main()
{
Init();
int T,n1,n2,n3;
cin>>T;
while(T--)
{
ll a=0,b=0,c=0;
scanf("%d",&n1);
for(int i=1;i<=n1;i++)
{
scanf("%d",&A[i]);
if(A[i]) a+=f[i];
}
scanf("%d",&n2);
for(int i=1;i<=n2;i++)
{
scanf("%d",&B[i]);
if(B[i]) b+=f[i];
}
scanf("%d",&n3);
for(int i=1;i<=n3;i++)
{
scanf("%d",&C[i]);
if(C[i]) c+=f[i];
}
a*=b;
for(int i=1;;i++)
if(c+f[i]==a)
{
printf("%d\n",i);
break;
}
}
return 0;
}