ivnikkk

Untitled

Aug 27th, 2022
1,235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.65 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <iomanip>
  6. #include <fstream>
  7. #include <string>
  8. #include <set>
  9. #include <deque>
  10. #include <queue>
  11. #include <map>
  12. #include <bitset>
  13. #include <random>
  14. #include <cassert>
  15.  
  16. using namespace std;
  17.  
  18. typedef long long            ll;
  19. typedef unsigned long long   ull;
  20. typedef long double          ld;
  21.  
  22. #define sqrt              sqrtl
  23. #define endl              "\n"
  24. #define all(a)            a.begin(), a.end()
  25. #define pb                push_back
  26. #define f1                first
  27. #define s2                second
  28.  
  29. const ll       inf = 1e9;
  30. long double    eps = 1e-18;
  31. ll             mod = 1e9 + 7;
  32. const ll         MAXN = 100010;
  33.  
  34. template <typename T>
  35. istream& operator >> (istream& in, vector <T>& a) {
  36.     for (T& i : a) {
  37.         in >> i;
  38.     }
  39.     return in;
  40. }
  41.  
  42. template <typename T>
  43. ostream& operator << (ostream& out, vector <T>& a) {
  44.     for (T& i : a) {
  45.         out << i << ' ';
  46.     }
  47.     return out;
  48. }
  49.  
  50. vector<map<ll, ll>>bor(1);
  51. vector<bool> flag(1);
  52. void add(string &s){
  53.     ll cur_v = 0;
  54.     for (ll i = 0; i < s.size(); i++){
  55.         char level;
  56.         if (s[i] <= 'z' && s[i] >= 'a')
  57.             level = s[i] - 'a';
  58.         else
  59.             level = 26 + s[i] - 'A';
  60.         if (bor[cur_v].find(level) == bor[cur_v].end()) {
  61.             bor.push_back(map<ll, ll>());
  62.             bor[cur_v][level] = bor.size() - 1;
  63.             flag.push_back(0);
  64.         }
  65.         cur_v = bor[cur_v][level];
  66.     }
  67.     flag[cur_v] = 1;
  68.     return;
  69. }
  70. ll find(string& s, ll left, ll right){
  71.     ll cur_v = 0;
  72.     for (; left < s.size() && left < right; left++){
  73.         char level;
  74.         if (s[left] <= 'z' && s[left] >= 'a')
  75.             level = s[left] - 'a';
  76.         else  
  77.             level = 26 + s[left] - 'A';
  78.         if (bor[cur_v].find(level) != bor[cur_v].end())    
  79.             cur_v = bor[cur_v][level];
  80.         else
  81.             return -1;
  82.         if (flag[cur_v] == 1)
  83.             return left;
  84.     }
  85.     return -1;
  86. }
  87.  
  88. void solve() {
  89.     string text;
  90.     ll t,c;
  91.     getline(cin, text);
  92.     ll n;
  93.     cin >> n;
  94.     for (ll i = 0; i < n; i++){
  95.         string a;
  96.         cin >> a;
  97.         add(a);
  98.     }
  99.     cin >> t >> c;
  100.     for (ll i = 0; i < text.size(); i++){
  101.         if (text[i] != ' '){
  102.             ll check = find(text, i, i + 10);
  103.             if (check != -1 && ( text.size() - check - 2 + c ) / c > t){
  104.                     cout << "NO";
  105.                     return;
  106.             }
  107.         }
  108.     }
  109.     cout << "YES";
  110. }
  111.    
  112.  
  113. signed main() {
  114.     ios_base::sync_with_stdio(false);
  115.     cin.tie(nullptr);
  116.     ll t = 1;
  117.     //cin >> t;
  118.     while (t--) solve();
  119. }
Advertisement
Add Comment
Please, Sign In to add comment