Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- typedef long long int ll;
- /*
- int factor(int x){
- int cnt = 0;
- int i;
- for(i = 1 ; i * i <= x ; i ++){
- if(x % i == 0){
- cnt++;
- }
- }
- i--;
- cnt *= 2;
- if(i*i == x){
- cnt--;
- }
- return cnt;
- }*/
- int factor[100010];
- int main()
- {
- for(int i = 1 ; i <= 100000 ; i ++){
- for(int j = i ; j <= 100000 ; j += i){
- factor[j]++;
- }
- }
- int n,m;
- scanf("%d %d",&n,&m);
- int arr[n];
- int key[m];
- for(int i = 0 ; i < n ; i ++){
- int a;
- scanf("%d",&a);
- arr[i] = factor[a];
- }
- for(int i = 0 ; i < m ; i ++){
- int k;
- scanf("%d",&k);
- key[i] = factor[k];
- }
- int LPS[m];
- LPS[0] = 0;
- for(int i = 1 , j = 0 ; i < m ; ){
- if(key[i] == key[j]){
- LPS[i] = j + 1;
- i ++; j ++;
- }
- else if(j > 0){
- j = LPS[j-1];
- }
- else{
- LPS[i] = 0;
- i++;
- }
- }
- // printf("Test LPS : ");for(int i = 0 ; i < m ; i ++)printf(" %d",LPS[i]);printf("\n");
- int ans = 0;
- for(int i = 0 , j = 0 ; i < n && i-j <= n-m ; ){
- if(arr[i] == key[j]){
- i ++ ; j ++;
- if(j > ans)ans = j;
- if(j == m){
- // if(j > ans)ans = j;
- j = LPS[j-1];
- }
- }
- else if(j > 0){
- if(j > ans)ans = j;
- j = LPS[j-1];
- }
- else{
- i ++;
- }
- }
- printf("%d",ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement