Salvens

H

Aug 1st, 2023
927
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.42 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3.  
  4. using namespace std;
  5.  
  6. #define int long long
  7.  
  8. const long long INF = 1e18 + 7;
  9. const int MAXN = 1e2 + 10;
  10. const int N = 1e5 + 10;
  11.  
  12. string dp[MAXN][MAXN];
  13.  
  14. signed main() {
  15.     ios_base::sync_with_stdio(false);
  16.     cin.tie(nullptr);
  17.     cout.tie(nullptr);
  18.     string s;
  19.     cin >> s;
  20.     int n = s.size();
  21.     for (int len = 1; len <= n; ++len) {
  22.         for (int l = 0; l + len - 1 < n; ++l) {
  23.             int r = l + len - 1;
  24.             dp[l][r] = s.substr(l, len);
  25.  
  26.             for (int m = l; m <= r; ++m) {
  27.                 if (dp[l][r].size() > dp[l][m].size() + dp[m + 1][r].size()) {
  28.                     dp[l][r] = dp[l][m] + dp[m + 1][r];
  29.                 }
  30.             }
  31.  
  32.             for (int p = 1; p <= len; ++p) {
  33.                 if (len % p == 0) {
  34.                     bool flag = true;
  35.                     for (int k = l + p; k <= r; ++k) {
  36.                         if (s[k] != s[k - p]) {
  37.                             flag = false;
  38.                             break;
  39.                         }
  40.                     }
  41.                     if (flag) {
  42.                         string tmp = to_string(len / p) + "(" + dp[l][l + p - 1] + ")";
  43.                         if (dp[l][r].size() > tmp.size()) {
  44.                             dp[l][r] = tmp;
  45.                         }
  46.                     }
  47.                 }
  48.             }
  49.         }
  50.     }
  51.     cout << dp[0][n - 1] << '\n';
  52. }
Advertisement
Add Comment
Please, Sign In to add comment