Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int factornum[100010];
- int pi[1000010];
- void prefix(int a[],int m){
- pi[1]=0;
- int k=0;
- for(int i=2;i<=m;++i){
- while(k>0&&a[i]!=a[k+1]){
- k=pi[k];
- }
- if(a[i]==a[k+1]){
- ++k;
- }
- pi[i]=k;
- }
- }
- int factor(int n){
- if(factornum[n]!=0){
- return factornum[n];
- }
- int cnt = 0;
- for(int i=1;i*i<=n;++i){
- if(n%i==0){
- if(n/i==i){
- ++cnt;
- }
- else{
- ++cnt;
- ++cnt;
- }
- }
- }
- return factornum[n]=cnt;
- }
- int main(){
- int n,m;
- scanf("%d%d",&n,&m);
- int a[n+10],b[m+10];
- int x;
- for(int i=1;i<=n;++i){
- scanf("%d",&x);
- a[i] = factor(x);
- }
- for(int i=1;i<=m;++i){
- scanf("%d",&x);
- b[i]=factor(x);
- }
- int max=0;
- prefix(b,m);
- int q=0;
- for(int i=1;i<=n;++i){
- while(q>0&&b[q+1]!=a[i]){
- q=pi[q];
- }
- if(b[q+1]==a[i]){
- ++q;
- }
- if(i+(m-q) <= n &&q>max){
- max = q;
- }
- if(q==m){
- max = m;
- q=pi[m];
- }
- }
- printf("%d",max);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement