Advertisement
SuitNdtie

Number Theory

May 21st, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.33 KB | None | 0 0
  1. #include<stdio.h>
  2. using namespace std;
  3. typedef long long int ll;
  4. ll const Pr = 98765431;
  5. int main(){
  6.     int n,m;
  7.     scanf("%d %d",&n,&m);
  8.     ll A[n];
  9.     ll rA[n];
  10.     for(int i = 0 ; i < n ; i ++){
  11.         scanf("%lld",&rA[i]);
  12.         A[i] = rA[i];
  13.     }
  14.     ll B[m];
  15.     int oneindex[13];
  16.     int oi = 0;
  17.     for(int i = 0 ; i < m ; i ++){
  18.         scanf("%lld",&B[i]);
  19.         if(B[i] == 1){
  20.             oneindex[oi++] = i;
  21.         }
  22.     }
  23.     ll hB = 0;
  24.     ll mem = 1;
  25.     for(int i = 0 ; i < m ; i ++){
  26.         hB *= Pr;
  27.         hB += B[i];
  28.         if(i!=0)mem*=Pr;
  29.     }
  30.     ll hA = 0;
  31.     for(int i = 0 ; i < oi ; i ++){
  32.         A[oneindex[i]] = 1;
  33.     }
  34.    
  35.     //onemem gen
  36.     int idx = oi - 1;
  37.     ll onemem[13];
  38.     ll tmem = 1;
  39.     for(int i = m - 1 ; i >= 0 ; i --){
  40.         if(i != m -1)tmem*=Pr;
  41.         if(B[i] == 1){
  42.             onemem[idx--] = tmem;
  43.         }
  44.     }
  45.     int Alen = 0;
  46.     int cted = 0;
  47.     int ans = 0;
  48.     for(int i = 0 ; i < n ; i ++){
  49.         hA *= Pr;
  50.         hA += A[i];
  51.         Alen++;
  52.         if(cted != 0){
  53.             for(int j = 0 ; j < oi ; j ++){
  54.                 hA -= A[oneindex[j]+cted]*onemem[j];
  55.                 hA += 1*onemem[j];
  56.             }
  57.         }
  58.         if(Alen == m){
  59.             if(hA == hB){
  60.                 ans++;
  61.             }
  62.             //if(cted == 0){
  63.                 for(int j = 0 ; j < oi ; j ++){
  64.                     if(cted == 0)A[oneindex[j]] = rA[oneindex[j]];
  65.                     hA -= 1*onemem[j];
  66.                     hA += A[oneindex[j]+cted]*onemem[j];
  67.                 }
  68.             //}
  69.             hA -= A[i - m + 1]*mem;
  70.             Alen--;
  71.             cted++;
  72.         }
  73.     }
  74.     printf("%d",ans);
  75.     return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement