senb1

krsu 3358

Mar 10th, 2023
448
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.29 KB | None | 0 0
  1. /*
  2. by:senb1
  3. */
  4.  
  5. #include <algorithm>
  6. #include <deque>
  7. #include <iomanip>
  8. #include <iostream>
  9. #include <list>
  10. #include <locale>
  11. #include <map>
  12. #include <numeric>
  13. #include <stack>
  14. #include <string>
  15. #include <valarray>
  16. #include <vector>
  17. #include <assert.h>
  18. #include <memory>
  19. #include <stdio.h>
  20.  
  21. using namespace std;
  22.  
  23. #define ll long long
  24. #define all(x) x.begin(), x.end()
  25. #define rall(x) x.rbegin(), x.rend()
  26. #define yes cout<<"YES\n"
  27. #define no cout<<"NO\n"
  28.  
  29. const int N = 5005;
  30. const int mod = 29876543;
  31.  
  32. int n;
  33. int dp[N][N];
  34. string s;
  35.  
  36. void solve() {
  37.     cin >> s;
  38.     n = s.size();
  39.     s = ' ' + s;
  40.  
  41.     for (int r = 1; r <= n; r++) {
  42.         for (int l = r; l >= 1; l--) {
  43.             if (l == r) {
  44.                 dp[l][r] = 1;
  45.                 continue;
  46.             }
  47.             dp[l][r] = (dp[l][r] + dp[l][r - 1]) % mod;
  48.             dp[l][r] = (dp[l][r] + dp[l + 1][r]) % mod;
  49.             dp[l][r] = (dp[l][r] - dp[l + 1][r - 1]) % mod;
  50.             if (dp[l][r] < 0)
  51.                 dp[l][r] += mod;
  52.             if (s[l] == s[r]) {
  53.                 dp[l][r] = (dp[l][r] + dp[l + 1][r - 1] + 1) % mod;
  54.             }
  55.         }
  56.     }
  57.  
  58.     cout << dp[1][n] << endl;
  59. }
  60.  
  61. int main() {
  62.     ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  63.     solve();
  64. }
  65.  
Advertisement
Add Comment
Please, Sign In to add comment