func_code_string: #include <bits/stdc++.h>   using namespace std;   const double pie = acos(-1);   int n, m, i, N, f[1100000], t, s, j, k, chz[266], ans, a[4][1100000],       b[4][1100000], gs[4], use[1100000];   char s1[1100000], s2[1100000];   struct fs {     double x, y;   } w[1100000], A[1100000], B[1100000], C[1100000], v, ww;   fs operator+(fs x, fs y) {     fs t;     t.x = x.x + y.x;     t.y = x.y + y.y;     return t;   }   fs operator-(fs x, fs y) {     fs t;     t.x = x.x - y.x;     t.y = x.y - y.y;     return t;   }   fs operator*(fs x, fs y) {     fs t;     t.x = x.x * y.x - x.y * y.y;     t.y = x.y * y.x + y.y * x.x;     return t;   }   void Init() {     for (i = 1; i < N; i++) f[i] = (f[i >> 1] >> 1) + ((i & 1) << t);     w[1].x = cos(2 * pie / N);     w[1].y = sin(2 * pie / N);     for (i = 2; i <= N; i++) w[i] = w[i - 1] * w[1];     w[0] = w[N];   }   void FFT(fs *a, int F) {     int i, j, k;     for (i = 0; i < N; i++)       if (i < f[i]) swap(a[i], a[f[i]]);     for (i = 1; i < N; i <<= 1) {       s = (N / i) >> 1;       for (j = 0; j < N; j += i << 1)         for (k = j; k < j + i; k++) {           if (F > 0)             ww = w[(k - j) * s];           else             ww = w[N - (k - j) * s];           v = a[k];           a[k] = v + ww * a[k + i];           a[k + i] = v - ww * a[k + i];         }     }     if (F < 0)       for (i = 0; i < N; i++) a[i].x /= N;   }   int main() {     scanf( %d%d%d , &n, &m, &k);     chz[ A ] = 0;     chz[ C ] = 1;     chz[ G ] = 2;     chz[ T ] = 3;     for (N = 1; N < n || N < m; N <<= 1, t++)       ;     N <<= 1;     Init();     scanf( %s , s1);     scanf( %s , s2);     for (i = 0; i <= k && i < n; i++) a[chz[s1[i]]][0]++;     for (i = 1; i < n; i++) {       for (j = 0; j < 4; j++) a[j][i] = a[j][i - 1];       if (i > k) a[chz[s1[i - k - 1]]][i]--;       if (i + k < n) a[chz[s1[i + k]]][i]++;     }     for (i = 0; i < n; i++)       for (j = 0; j < 4; j++) a[j][i] = a[j][i] > 0;     for (i = 0; i < m; i++) b[chz[s2[i]]][m - i - 1] = 1, gs[chz[s2[i]]]++;     memset(use, -1, sizeof(use));     for (i = 0; i < 4; i++) {       for (j = 0; j < N; j++) A[j].x = a[i][j], A[j].y = 0;       for (j = 0; j < N; j++) B[j].x = b[i][j], B[j].y = 0;       FFT(A, 1);       FFT(B, 1);       for (j = 0; j < N; j++) C[j] = A[j] * B[j];       FFT(C, -1);       for (j = 0; j < N; j++)         if ((int)(C[j].x + 0.5) != gs[i]) use[j] = 0;     }     for (i = 0; i < N; i++)       if (use[i] < 0) ans++;     printf( %d n , ans);   }   