Advertisement
Guest User

Untitled

a guest
Jun 25th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.70 KB | None | 0 0
  1. /*
  2.  
  3. Code for problem strange by cookiedoth
  4. Generated 25 Jun 2019 at 11.43 P
  5.  
  6.  
  7. ──────▄▌▐▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▌
  8. ───▄▄██▌█░ВЕЗЁМ▄▀▀▀▄░ГУСЕЙ░░░░░░░
  9. ───████▌█▄███▀░◐░▄▀▀▀▄░░РАБОТЯГИ░
  10. ──██░░█▌█░░▄███▀░◐░░▄▀▀▀▄░░░░░░░
  11. ─██░░░█▌█░░░░▐░▄▀▀▀▌░░░░◐░▀███▄░
  12. ▄██████▌█▄███▀░◐░░░▌░░░░░▐░░░░░░
  13. ███████▌█░░░░▌░░░░░▌░░░░░▐░░░░░░
  14. ███████▌█▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▌
  15. ▀(@)▀▀▀▀▀▀▀(@)(@)▀▀▀▀▀▀▀▀▀▀▀▀▀(@)▀(@)
  16.  
  17. ^_^
  18. -_-
  19. z_z
  20.  
  21. */
  22.  
  23. #include <iostream>
  24. #include <fstream>
  25. #include <vector>
  26. #include <set>
  27. #include <map>
  28. #include <bitset>
  29. #include <algorithm>
  30. #include <iomanip>
  31. #include <cmath>
  32. #include <ctime>
  33. #include <functional>
  34. #include <unordered_set>
  35. #include <unordered_map>
  36. #include <string>
  37. #include <queue>
  38. #include <deque>
  39. #include <stack>
  40. #include <complex>
  41. #include <cassert>
  42. #include <random>
  43. #include <cstring>
  44. #include <numeric>
  45. #define ll long long
  46. #define ld long double
  47. #define null NULL
  48. #define all(a) a.begin(), a.end()
  49. #define debug(a) cerr << #a << " = " << a << endl
  50. #define forn(i, n) for (int i = 0; i < n; ++i)
  51. #define sz(a) (int)a.size()
  52.  
  53. using namespace std;
  54.  
  55. template<class T> int chkmax(T &a, T b) {
  56. if (b > a) {
  57. a = b;
  58. return 1;
  59. }
  60. return 0;
  61. }
  62.  
  63. template<class T> int chkmin(T &a, T b) {
  64. if (b < a) {
  65. a = b;
  66. return 1;
  67. }
  68. return 0;
  69. }
  70.  
  71. template<class iterator> void output(iterator begin, iterator end, ostream& out = cerr) {
  72. while (begin != end) {
  73. out << (*begin) << " ";
  74. begin++;
  75. }
  76. out << endl;
  77. }
  78.  
  79. template<class T> void output(T x, ostream& out = cerr) {
  80. output(x.begin(), x.end(), out);
  81. }
  82.  
  83. void fast_io() {
  84. ios_base::sync_with_stdio(0);
  85. cin.tie(0);
  86. cout.tie(0);
  87. }
  88.  
  89. const int INF = 1e9;
  90. const int K = 26;
  91. const int mx = 1010;
  92. string s;
  93. int n, val, lcp[mx][mx];
  94.  
  95. int gcd(int a, int b) {
  96. return (b == 0 ? a : gcd(b, a % b));
  97. }
  98.  
  99. void calc_val() {
  100. int res = 0;
  101. vector<int> cnt(K);
  102. for (int i = 0; i < n; ++i) {
  103. cnt[s[i] - 'a']++;
  104. }
  105. for (int i = 0; i < K; ++i) {
  106. val = gcd(val, cnt[i]);
  107. }
  108. }
  109.  
  110. void calc_lcp() {
  111. for (int i = n - 1; i >= 0; --i) {
  112. for (int j = n - 1; j >= 0; --j) {
  113. lcp[i][j] = (s[i] == s[j] ? lcp[i + 1][j + 1] + 1 : 0);
  114. }
  115. }
  116. }
  117.  
  118. void read() {
  119. cin >> s;
  120. n = s.size();
  121. }
  122.  
  123. int best_sum = INF;
  124. string A, B;
  125.  
  126. int put_pref[mx], put_suf[mx];
  127. bitset<mx> dp[mx];
  128.  
  129. void check_pref_suf(int pref, int suf) {
  130. //cerr << "check_pref_suf " << pref << " " << suf << endl;
  131. for (int i = 0; i < n; ++i) {
  132. if (lcp[i][0] >= pref) {
  133. put_pref[i] = 1;
  134. }
  135. if (lcp[i][n - suf] >= suf) {
  136. put_suf[i] = 1;
  137. }
  138. }
  139. dp[0][0] = 1;
  140. for (int i = 0; i < n; ++i) {
  141. if (put_pref[i]) {
  142. dp[i + pref] |= (dp[i] << 1);
  143. }
  144. if (put_suf[i]) {
  145. dp[i + suf] |= (dp[i] >> 1);
  146. }
  147. }
  148. if (dp[n][0] && chkmin(best_sum, pref + suf)) {
  149. A = s.substr(0, pref);
  150. B = s.substr(n - suf, suf);
  151. }
  152. }
  153.  
  154. void check_sum(int sum) {
  155. for (int i = 1; i <= sum - 1; ++i) {
  156. check_pref_suf(i, sum - i);
  157. }
  158. }
  159.  
  160. void process() {
  161. for (int i = 1; i <= val; ++i) {
  162. if (val % i == 0) {
  163. check_sum(n / i);
  164. }
  165. }
  166. }
  167.  
  168. void print() {
  169. cout << A << " " << B << endl;
  170. }
  171.  
  172. signed main() {
  173. fast_io();
  174. read();
  175. calc_val();
  176. calc_lcp();
  177. process();
  178. print();
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement