Advertisement
Salvens

Untitled

Jun 3rd, 2023
965
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.34 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <iomanip>
  4. #include <cmath>
  5. #include <vector>
  6. #include <set>
  7. #include <map>
  8. #include <string>
  9. #include <cassert>
  10. #include <numeric>
  11. #include <queue>
  12. #include <cstdint>
  13. #include <string>
  14. #include <unordered_map>
  15. using namespace std;
  16.  
  17. #define int long long
  18. #define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
  19.  
  20. const long long INF = 1e18 + 7;
  21. const double EPS = 1e-9;
  22. const int N = 5010;
  23. const int MOD = 1e9 + 7;
  24. int P = 23039, P1 = 22943;
  25.  
  26.  
  27. int d[N][N];
  28. int power[N], power1[N];
  29.  
  30. int Get(char c) {
  31.     return c - 'a' + 1;
  32. }
  33.  
  34. void MakeHash(string s, vector<pair<int, int>>& hse) {
  35.     hse[0].first = Get(s[0]);
  36.     hse[0].second = Get(s[0]);
  37.     for (int i = 1; i < s.size(); ++i) {
  38.         hse[i].first = (hse[i - 1].first * P + Get(s[i])) % MOD;
  39.         hse[i].second = (hse[i - 1].second * P1 + Get(s[i]) * power1[i]) % MOD;
  40.     }
  41. }
  42.  
  43. bool IsPol(string x) {
  44.     string y = x;
  45.     reverse(y.begin(), y.end());
  46.     return x == y;
  47. }
  48.  
  49. inline void solve() {
  50.     string s;
  51.     int n;
  52.     cin >> s;
  53.     n = s.size();
  54.     string t = s;
  55.     reverse(t.begin(), t.end());
  56.  
  57.     power[0] = 1;
  58.     power1[0] = 1;
  59.     for (int i = 1; i < n; ++i) {
  60.         power[i] = power[i - 1] * P % MOD;
  61.         power1[i] = power1[i - 1] * P1 % MOD;
  62.     }
  63.  
  64.     vector<pair<int, int>> pref(n), suff(n);
  65.     MakeHash(s, pref);
  66.     MakeHash(t, suff);
  67.  
  68. //    for (auto [x, y]: pref) {
  69. //        cout << x << ' ' << y << ' ';
  70. //    }
  71. //    cout << endl;
  72. //    for (auto [x, y]: suff) {
  73. //        cout << x << ' ' << y << ' ';
  74. //    }
  75. //    cout << endl << endl;
  76.  
  77.  
  78.     for (int l = 0; l < n; ++l) {
  79.         for (int r = l; r < n; ++r) {
  80.  
  81.             int l1 = n - 1 - r, r1 = n - 1 - l;
  82.  
  83.             int x = (pref[r].first - pref[l].first * power[r - l + 1]) % MOD;
  84.             int y = (suff[r1].first - suff[l1].first * power[r1 - l1 + 1]) % MOD;
  85.  
  86.             int x2 = (pref[r].second - pref[l].second * power1[r - l + 1]) % MOD;
  87.             int y2 = (suff[r1].second - suff[l1].second * power1[r1 - l1 + 1]) % MOD;
  88.  
  89.             if (x == y && x2 == y2) {
  90.                 d[l][r] = 1;
  91.             }
  92.         }
  93.     }
  94.  
  95.     for (int i = 0; i < n; ++i) {
  96.         for (int j = 0; j < n; ++j) {
  97.             cout << d[i][j] << ' ';
  98.         }
  99.         cout << endl;
  100.     }
  101.  
  102.     for (int i = 0; i < n; ++i) {
  103.         d[i][i] = 1;
  104.     }
  105.     for (int i = 1; i < n; ++i) {
  106.         for (int x = 0, y = i; y < n; ++x, ++y) {
  107.             d[x][y] += d[x + 1][y] + d[x][y - 1] - d[x + 1][y - 1];
  108.         }
  109.     }
  110.  
  111.     int q;
  112.     cin >> q;
  113.     while (q--) {
  114.         int x, y;
  115.         cin >> x >> y;
  116.         cout << d[x - 1][y - 1] << ' ';
  117.     }
  118. }
  119.  
  120.  
  121.  
  122. int32_t main() {
  123.     IOS;
  124.  
  125.     int tt = 1;
  126. //    cin >> t;
  127.     while (tt--) {
  128.         solve();
  129.     }
  130.     return 0;
  131. }
  132.  
  133. /*
  134. 1.  数组开够了没
  135. 2.  文件名写对了没,文件夹建了吗
  136. 3.  内存会不会MLE
  137. 4.  多测清空?
  138. 5.  调试删干净了没
  139. 6.  取模有没有溢出
  140. 7.  快速幂底数要取模,幂对 mod-1 取模
  141. 8.  前向星和欧拉序要开2倍数组
  142. 9.  比较函数如果值相同的话有没有第二优先级
  143. 10. 线段树 4 倍空间,线段树合并和可持久化线段树 32 倍空间
  144. 11. 看清楚 log 的底数是啥,log后面的数是啥
  145. 12. long long 只有正负 2^63-1
  146. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement