Advertisement
_rashed

SPOJ TESSER

Jul 25th, 2022
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.39 KB | None | 0 0
  1. #define ll long long
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. const int OO = 1e9;
  6. const double EPS = 1e-9;
  7.  
  8. int arr[100000];
  9.  
  10. vector<int> computePrefixes(string s) {
  11.     vector<int> ret(s.length());
  12.     for(int i = 1, k = 0; i < s.length(); i++) {
  13.         while(k > 0 && s[k] != s[i]) {
  14.             k = ret[k-1];
  15.         }
  16.         ret[i] = (s[i] == s[k] ? ++k:k);
  17.     }
  18.     return ret;
  19. }
  20.  
  21. bool kmp(string s, string p) {
  22.     vector<int> pre = computePrefixes(p);
  23.     for(int i = 0, k = 0; i < s.length(); i++) {
  24.         while(k > 0 && s[i] != p[k]) {
  25.             k = pre[k-1];
  26.         }
  27.         if(s[i] == p[k]) {
  28.             k++;
  29.         }
  30.         if(k == p.length()) {
  31.             return true;
  32.         }
  33.     }
  34.     return false;
  35. }
  36.  
  37. int main()
  38. {
  39.     ios_base::sync_with_stdio(NULL);
  40.     cin.tie(0);
  41.     cout.tie(0);
  42.     int t;
  43.     cin >> t;
  44.     while(t--) {
  45.         int n;
  46.         cin >> n;
  47.         for(int i = 0; i < n; i++) {
  48.             cin >> arr[i];
  49.         }
  50.         string p;
  51.         cin >> p;
  52.         string s = "";
  53.         for(int i = 1; i < n; i++) {
  54.             if(arr[i] > arr[i-1]) {
  55.                 s += 'G';
  56.             }
  57.             else if(arr[i] == arr[i-1]) {
  58.                 s += 'E';
  59.             }
  60.             else {
  61.                 s += 'L';
  62.             }
  63.         }
  64.         cout << (kmp(s,p) ? "YES\n":"NO\n");
  65.     }
  66.     return 0;
  67. }
  68.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement