Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <string>
- #include <queue>
- #include <map>
- #include <bitset>
- #include <vector>
- #include <set>
- #include <cmath>
- #include <iomanip>
- #include <algorithm>
- #include <fstream>
- #include <unordered_map>
- #include <stack>
- typedef long long ll;
- using namespace std;
- const ll inf = 1e18;
- ll num_len(ll n)
- {
- int cnt = 0;
- while (n > 0)
- {
- n /= 10;
- ++cnt;
- }
- return cnt;
- }
- bool is_10_powered(ll n)
- {
- while (n >= 10)
- {
- if (n % 10 != 0)
- return false;
- n /= 10;
- }
- return n == 1;
- }
- bool first_way(ll n)
- {
- // [2*10^n; 10^(n + 1)]
- if (n <= 10 || is_10_powered(n - 1))
- return true;
- // get first digit
- while (n >= 10)
- n /= 10;
- return n > 1;
- }
- int main()
- {
- string s;
- cin >> s;
- vector<pair<ll, char>> v;
- ll cnt = 0;
- int n = s.size();
- for (int i = 0; i < n; i++)
- {
- if (isalpha(s[i]))
- {
- v.push_back(make_pair(max(1LL, cnt), s[i]));
- cnt = 0;
- }
- else
- cnt = cnt * 10 + s[i] - '0';
- }
- // minimize
- ll m = v.size();
- ll mn = m;
- ll idx = -1;
- for (int i = 1; i < m - 1; i++)
- {
- if (v[i - 1].second == v[i + 1].second && v[i].first == 1)
- {
- ll sum = v[i - 1].first + v[i + 1].first;
- ll delt_nums_len = num_len(v[i - 1].first) + num_len(v[i + 1].first) - num_len(sum);
- ll new_len = m - 2 - delt_nums_len;
- if (new_len < mn)
- {
- mn = new_len;
- idx = i;
- }
- }
- }
- if (idx == -1)
- {
- for (int i = 0; i < m; i++)
- {
- if (is_10_powered(v[i].first) && m - 1 < mn)
- {
- mn = m - 1;
- idx = i;
- break;
- }
- }
- }
- if (idx == -1)
- cout << 2 << ' ' << 1;
- else
- {
- ll sum = 0;
- for (ll i = 0; i <= idx; i++)
- sum += v[i].first;
- cout << 2 << ' ' << sum;
- }
- cout << endl;
- // maximaze
- ll mx = m;
- idx = -1;
- char type = 'n';
- for (int i = 0; i < m; i++)
- {
- if (first_way(v[i].first))
- {
- if (m + 2 > mx)
- {
- mx = m + 2;
- idx = i;
- type = 'b';
- }
- }
- else if (v[i].first > 1)
- {
- mx = m + 3;
- idx = i;
- type = 'g';
- break;
- }
- }
- if (idx == -1)
- {
- if (v.back().second != 'A')
- cout << 1 << ' ' << n << ' ' << 'A';
- else if (v.back().second != 'C')
- cout << 1 << ' ' << n << ' ' << 'C';
- else if (v.back().second != 'G')
- cout << 1 << ' ' << n << ' ' << 'G';
- else if (v.back().second != 'T')
- cout << 1 << ' ' << n << ' ' << 'T';
- }
- else
- {
- if (type == 'g')
- {
- ll len = num_len(v[idx].first);
- ll sum = 0;
- for (ll i = 0; i < idx; i++)
- sum += v[i].first;
- sum += pow(10, len - 1);
- if (v[idx].second != 'A')
- cout << 1 << ' ' << sum << ' ' << 'A';
- else if (v[idx].second != 'C')
- cout << 1 << ' ' << sum << ' ' << 'C';
- else if (v[idx].second != 'G')
- cout << 1 << ' ' << sum << ' ' << 'G';
- else if (v[idx].second != 'T')
- cout << 1 << ' ' << sum << ' ' << 'T';
- }
- else
- {
- ll sum = 0;
- for (ll i = 0; i <= idx; i++)
- sum += v[i].first;
- sum -= 2;
- if (v[idx].second != 'A')
- cout << 1 << ' ' << sum << ' ' << 'A';
- else if (v[idx].second != 'C')
- cout << 1 << ' ' << sum << ' ' << 'C';
- else if (v[idx].second != 'G')
- cout << 1 << ' ' << sum << ' ' << 'G';
- else if (v[idx].second != 'T')
- cout << 1 << ' ' << sum << ' ' << 'T';
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement