Advertisement
Guest User

Untitled

a guest
Feb 11th, 2013
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.10 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <vector>
  6. #include <string>
  7. #include <cstring>
  8. #include <ctime>
  9. #include <queue>
  10. #include <set>
  11. #include <map>
  12.  
  13. using namespace std;
  14.  
  15. char c;
  16.  
  17. int n, z[2000][2000], l, r, d[2000], ans, s[2000], ok[50], cur, qq;
  18.  
  19. int main() {
  20.     c = getchar();
  21.  
  22.     while(c != '\n') {
  23.         s[n++] = c - 'a' + 1;
  24.         c = getchar();
  25.     }
  26.  
  27.     for (int i = 1; i <= 26; i++) {
  28.         c = getchar();
  29.         ok[i] = c - '0';
  30.     }
  31.  
  32.     cin >> qq;
  33.  
  34.     for (int k = 1; k < n; k++) {
  35.         l = k - 1, r = -1;
  36.         for (int i = k; i < n; ++i) {
  37.             if (i <= r)
  38.                 z[k][i] = min(r - i + 1, z[k][k + i - l - 1]);
  39.             while(i + z[k][i] < n && s[k + z[k][i] - 1] == s[i + z[k][i]])
  40.                 ++z[k][i];
  41.             if (i + z[k][i] - 1 > r)
  42.                 l = i, r = i + z[k][i] - 1;
  43.         }
  44.     }
  45.  
  46.     for (int i = 1; i < n; i++)
  47.         for (int j = i - 1; j < n; j++)
  48.             d[j] = max(d[j], z[i][j]);
  49.    
  50.     for (int i = 0; i < n; i++) {
  51.         cur = 0;
  52.         for (int j = i; j < n; j++) {
  53.             cur += 1 - ok[s[j]];
  54.             if (cur > qq)
  55.                 break;
  56.             if (j >= i + d[i])
  57.                 ans++;
  58.         }
  59.     }
  60.  
  61.     cout << ans;
  62.    
  63.     return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement