Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- string COMPRESS(string s, int increment) {
- string unchanged = s;
- s += 'O';
- /*if ((s.size() - 2) / increment == 2) {
- if (s.substr(0, increment) == s.substr(increment, increment)) {
- return s.substr(0, increment) + 'R';
- }
- return s;
- }*/
- if (s.size() == 1) return "";
- string out = "";
- int last_i = 0;
- for (int i = increment; i <= s.size() - increment - 1; i += increment) {
- /*cout << s.substr(i - increment, increment) << " " << s.substr(i, increment) << endl;
- cout << " increment: " << increment << endl;
- cout << " s.size() = " << s.size() << endl;
- cout << " i, increment: " << (i + increment >= s.size()) << endl;*/
- if (s.substr(i - increment, increment) == s.substr(i, increment)) {
- out = out + s.substr(i - increment, increment) + 'R';
- i += increment;
- } else {
- out += s.substr(i - increment, increment);
- }
- last_i = i;
- }
- // cout << last_i << endl;
- string ELSE = s.substr(last_i, s.size() - (last_i) - 2);
- out += ELSE;
- // cout << " ELSE: " << ELSE << endl;
- // cout << " OUT: " << out << endl;
- return out;
- }
- int main()
- {
- string s;
- cin >> s;
- string compressed = s;
- string toMatch = s;
- // this compresses the string as much as it can
- for (int k = 0; true; ++k) {
- bool notFailed = false;
- // this loop goes through every possible length match
- // ex: abababbabb => if i = 2:
- // ab ab ab ba ab b
- // out: abRabbaabb => i++
- for (int i = 1; i < ceil(s.size() / 2.00); ++i) {
- compressed = COMPRESS(compressed + 'S', i);
- if (!compressed.compare(toMatch)) {
- toMatch = compressed;
- notFailed = true;
- }
- }
- if (!notFailed) break;
- }
- cout << compressed.size() << endl;
- // cout << "FINAL : " << COMPRESS(s + "S", 1) << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment