Advertisement
skimono

Untitled

Sep 20th, 2023
1,198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.52 KB | None | 0 0
  1. #pragma GCC optimize("Ofast") // ������������ ���������, �� ��� ������
  2. #pragma GCC optimize("no-stack-protector") //�����
  3. #pragma GCC optimize("unroll-loops") // � ���� ���� ��� �� 100 �� ������ ����� � ��������� �� ��� � 100 ��� �� ������ ��������
  4. #pragma GCC target("sse,sse2,sse3,ssse3,popcnt,abm,mmx,tune=native") // ��� ����� ����� �� ��� 03 02 ��������� � ������ ������� �������� ��� ���� ������������
  5. #pragma GCC optimize("fast-math")
  6. #define _CRT_SECURE_NO_WARNINGS
  7.  
  8. #include <iostream>
  9. #include <vector>
  10. #include <string>
  11. #include <algorithm>
  12. #include <cmath>
  13. #include <stack>
  14. #include <iomanip>
  15. #include <fstream>
  16. #include <string>
  17. #include <set>
  18. #include <deque>
  19. #include <queue>
  20. #include <map>
  21. #include <bitset>
  22. #include <random>
  23. #include <list>
  24. #include <unordered_map>
  25. #include <unordered_set>
  26. #include <cassert>
  27.  
  28. using namespace std;
  29.  
  30. typedef long long ll;
  31. typedef short sh;
  32. typedef unsigned long long ull;
  33. typedef long double ld;
  34. typedef string str;
  35. //typedef __int128 ultraint;
  36. #define sqrt sqrtl
  37. #define F first
  38. #define S second
  39. #define endl '\n'
  40. #define all(vc666) vc666.begin(), vc666.end()
  41. #define allr(vc666) vc666.rbegin(), vc666.rend()
  42. //#define int long long
  43. #define degug(x) cerr (#x) << " " << (x) << endl;
  44.  
  45. const ll INF = 2e18;
  46. const ll inf = 2e9 + 3;
  47. const ll ONE = 1, ZERO = 0;
  48. const ll mod = 998244353;
  49. const ll m1 = 1e9 + 575179;
  50. const ll m2 = 1e9 + 87;
  51. const ll LG = 19;
  52. const ll k_mo = 400;
  53. const ll k_sqrt = 400;
  54. const ll p = 79;
  55. ld EPS = 1e-9;
  56. ld PI = 3.1415926535897932384;
  57. ld phi = (sqrt(5) + 1.0) / 2.0;
  58. mt19937_64 rnd(4906);
  59.  
  60. const int N = 1e5 + 3;
  61. pair <ll, ll> pw[N];
  62. pair <ll, ll> h[N];
  63.  
  64. pair <int, int> get_h(int l, int r) {
  65.     return { (h[r + 1].first - (h[l].first * pw[r - l + 1].first) % m1 + m1) % m1, (h[r + 1].second - (h[l].second * pw[r - l + 1].second) % m2 + m2) % m2 };
  66. }
  67.  
  68. void solve() {
  69.     string t, s;
  70.     cin >> t;
  71.     ll ans;
  72.     ll i, j, len_t = t.size(), l, r;
  73.     vector <vector <int> > cort(N, vector <int>(0));
  74.     vector <vector <pair <int, int> > > keys(N, vector <pair <int, int> >(0));
  75.     vector <ll> rzl;
  76.     rzl.reserve(sqrt(N));
  77.     ll n, len_s, len, m;
  78.     pair <ll, ll> hesh;
  79.     pw[0] = { 1, 1 };
  80.     h[0] = { 0, 0 };
  81.     for (i = 1; i <= len_t; i++) {
  82.         pw[i].first = (pw[i - 1].first * p) % m1;
  83.         pw[i].second = (pw[i - 1].second * p) % m2;
  84.         h[i].first = (h[i - 1].first * p + (t[i - 1] - 'a' + ONE)) % m1;
  85.         h[i].second = (h[i - 1].second * p + (t[i - 1] - 'a' + ONE)) % m2;
  86.     }
  87.     cin >> n;
  88.     for (i = 0; i < n; i++) {
  89.         cin >> s;
  90.         len_s = s.size();
  91.         rzl.push_back(len_s);
  92.         hesh = { 0, 0 };
  93.         for (j = 0; j < len_s; j++) {
  94.             hesh.first = (hesh.first * p + (s[j] - 'a' + ONE)) % m1;
  95.             hesh.second = (hesh.second * p + (s[j] - 'a' + ONE)) % m2;
  96.         }
  97.         keys[len_s].push_back(hesh);
  98.     }
  99.     sort(all(rzl));
  100.     rzl.resize(unique(all(rzl)) - rzl.begin());
  101.     m = rzl.size();
  102.     for (i = 0; i < m; i++) {
  103.         sort(all(keys[rzl[i]]));
  104.         cort[rzl[i]].assign(len_t + 1, 0);
  105.     }
  106.     for (i = 0; i < len_t; i++) {
  107.         for (j = 0; j < m; j++) {
  108.             len = rzl[j];
  109.             if (i + len - 1 < len_t) {
  110.                 if (binary_search(all(keys[len]), get_h(i, i + len - 1))) {
  111.                     cort[len][i + len]++;
  112.                 }
  113.             }
  114.             else {
  115.                 break;
  116.             }
  117.         }
  118.     }
  119.     for (i = 0; i < m; i++) {
  120.         for (j = 1; j <= len_t; j++) {
  121.             cort[rzl[i]][j] += cort[rzl[i]][j - 1];
  122.         }
  123.     }
  124.     cin >> n;
  125.     while (n--) {
  126.         ans = 0;
  127.         cin >> l >> r;
  128.         for (i = 0; i < m; i++) {
  129.             len = rzl[i];
  130.             if (len > (r - l + 1)) break;
  131.             ans += (cort[len][r] - cort[len][l + len - 2]);
  132.         }
  133.         cout << ans << " ";
  134.     }
  135. }
  136.  
  137. signed main() {
  138. #ifdef _DEBUG
  139.     freopen("input.txt", "r ", stdin);
  140.     freopen("output.txt", "w", stdout);
  141. #endif
  142.     ios_base::sync_with_stdio(0);
  143.     cin.tie(NULL);
  144.     cout.tie(NULL);
  145.     int t = 1;
  146.     //cin >> t;
  147.     while (t--) solve();
  148. }
  149. //Deisgned by skimono
  150. //Клуб "Кольца(Серьги)"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement