Advertisement
FreakSkipper

Untitled

Sep 18th, 2020
830
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.34 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define vi vector<int>
  6. #define ll long long
  7. #define pb push_back
  8. #define mp make_pair
  9. #define ii pair<int, int>
  10.  
  11. int main() {
  12.     string t, p;
  13.     vector<pair<char, int>> palavra;
  14.     queue<int> idx;
  15.     int contador = 0;
  16.  
  17.     cin >> t >> p;
  18.  
  19.     for (unsigned i = 0; i < t.size(); i++) {
  20.         int aux;
  21.         cin >> aux;
  22.         idx.push(aux - 1);
  23.  
  24.         // ----
  25.         palavra.pb(mp(t[i], i));
  26.     }
  27.  
  28.     while (!idx.empty()) {
  29.         int l = 0, r = palavra.size() - 1;
  30.         while (l <= r) {
  31.             int mid = (l + r) / 2;
  32.             if (palavra[mid].second == idx.front()) {
  33.                 palavra.erase(palavra.begin() + mid);
  34.                 idx.pop();
  35.                 break;
  36.             } else {
  37.                 if (palavra[mid].second > idx.front()) {
  38.                     r = mid - 1;
  39.                 } else {
  40.                     l = mid + 1;
  41.                 }
  42.             }
  43.         }
  44.  
  45.         unsigned pos_p = 0;
  46.         for (unsigned i = 0; i < palavra.size() && pos_p < p.size(); i++) {
  47.             if (palavra[i].first == p[pos_p]) {
  48.                 pos_p++;
  49.             }
  50.         }
  51.  
  52.         if (pos_p == p.size()) {
  53.             contador++;
  54.         } else {
  55.             break;
  56.         }
  57.     }
  58.  
  59.     cout << contador << endl;
  60.  
  61.     return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement