Advertisement
ivnikkk

Untitled

Jan 2nd, 2023
796
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.96 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include "bits/stdc++.h"
  3. using namespace std;
  4. typedef unsigned int ui;
  5. typedef long long             ll;
  6. typedef unsigned long long     ull;
  7. typedef long double            ld;
  8. #define endl              "\n"
  9. #define all(a)            a.begin(), a.end()
  10. #define allr(a)           a.rbegin(), a.rend()
  11. #define pb                push_back
  12. #define F                 first
  13. #define S                 second
  14. struct ANS {
  15.     ll type;
  16.     ll pos;
  17.     char sl;
  18. };
  19. ll cnt_of_num(ll num) {
  20.     ll cnt = 0;
  21.     while (num) {
  22.         num /= 10;
  23.         cnt++;
  24.     }
  25.     return cnt;
  26. }
  27. bool is_ten(ll dec) {
  28.     ll i = 1;
  29.     while (dec > i) i *= 10;
  30.     if (dec == i)return true;
  31.     return false;
  32. }
  33. bool is_ten_min(ll dec) {
  34.     ll i = 1;
  35.     while (dec > i)i *= 10;
  36.     if (dec + 1 == i)return true;
  37.     else return false;
  38. }
  39. char no_sim(char c) {
  40.     if (c == 'A' || c == 'G' || c == 'C')return 'T';
  41.     else return 'A';
  42.     //a g c t
  43. }
  44. signed main() {
  45. #ifdef _DEBUG
  46.     freopen("input.txt", "r", stdin);
  47.     freopen("output.txt", "w", stdout);
  48. #endif
  49.     ios_base::sync_with_stdio(false);
  50.     cin.tie(nullptr);
  51.     ll t = 1;
  52.     srand(time(NULL));
  53.     string s;
  54.     cin >> s;
  55.     vector<pair<ll, pair<ll, char>>>sub;
  56.     map<ll, ll> posit;
  57.     ll now = 0;
  58.     for (ll i = 0; i < (ll)s.size(); i++) {
  59.         string num = "";
  60.         while (s[i] >= '0' && s[i] <= '9')num += s[i++];
  61.         if (i) {
  62.             if (i >= 1) {
  63.                 if (s[i] >= 'A' && s[i] <= 'Z' && s[i - 1] >= '0' && s[i - 1] <= '9') {
  64.                     now += stoi(num);
  65.                     posit[sub.size()] = now;
  66.                     sub.push_back({ (ll)num.size(), { stoi(num),s[i] } });
  67.                 }
  68.                 if (s[i] >= 'A' && s[i] <= 'Z' && s[i - 1] >= 'A' && s[i - 1] <= 'Z') {
  69.                     now++;
  70.                     posit[sub.size()] = now;
  71.                     sub.push_back({ (ll)1, { (ll)1,s[i] } });
  72.                 }
  73.             }
  74.         }
  75.         else if (s[i] >= 'A' && s[i] <= 'Z') {
  76.             now++;
  77.             posit[sub.size()] = now;
  78.             sub.push_back({ (ll)1, { (ll)1,s[i] } });
  79.         }
  80.  
  81.     }
  82.     char last = '#';
  83.     ANS mn_an, mn_an_jd;
  84.     ll pos = 0;
  85.     bool mn_just_del = false;
  86.     ll plus_from_slianie_delete;
  87.     ll pre_ans_mn = -1e18;
  88.     bool mn = false, mx = false;
  89.     if ((ll)sub.size() >= 3) {
  90.         for (ll i = 0; i < (ll)sub.size(); i += 2) {
  91.             if (sub[i].S.second == last && sub[i - 1].S.first == 1) {
  92.                 if (sub[i].first + sub[i - 2].first - cnt_of_num(sub[i].S.first + sub[i - 2].S.F) > pre_ans_mn) {
  93.                     pre_ans_mn = sub[i].first + sub[i - 2].first - cnt_of_num(sub[i].S.first + sub[i - 2].S.F);
  94.                     mn_an = { 2,posit[i - 1],'#' };
  95.                     mn = true;
  96.                 }
  97.             }
  98.             else if (i > 0 && sub[i - 1].F == 1) {
  99.                 mn_just_del = true;
  100.                 mn_an_jd = { 2,posit[i - 1] };
  101.             }
  102.             last = sub[i].S.second;
  103.         }
  104.         last = '#';
  105.         if ((ll)sub.size() >= 4) {
  106.             for (ll i = 1; i < (ll)sub.size(); i += 2) {
  107.                 if (sub[i].S.second == last && sub[i - 1].S.first == 1) {
  108.                     if (sub[i].first + sub[i - 2].first - cnt_of_num(sub[i].S.first + sub[i - 2].S.F) > pre_ans_mn) {
  109.                         pre_ans_mn = sub[i].first + sub[i - 2].first - cnt_of_num(sub[i].S.first + sub[i - 2].S.F);
  110.  
  111.                         mn_an = { 2,posit[i - 1],'#' };
  112.                         mn = true;
  113.                     }
  114.                 }
  115.                 else if (sub[i - 1].F == 1) {
  116.                     mn_just_del = true;
  117.                     mn_an_jd = { 2,posit[i - 1] };
  118.                 }
  119.                 last = sub[i].S.second;
  120.             }
  121.             pre_ans_mn++;
  122.         }
  123.     }
  124.     if (mn && pre_ans_mn > 0) {
  125.         cout << 2 << ' ' << mn_an.pos << endl;
  126.     }
  127.     else if (mn_just_del) {
  128.         cout << 2 << ' ' << mn_an_jd.pos << endl;
  129.     }
  130.     else {
  131.         ll rem = -1;
  132.         ll dec = 1;
  133.         ll ans = 1;
  134.         bool fublya = false;
  135.         ll rem2 = 1;
  136.         for (ll i = 0; i < (ll)sub.size(); i++) {
  137.             if (is_ten(sub[i].second.first)) {
  138.                 fublya = true;
  139.                 if (is_ten(sub[i].second.first) >= dec) {
  140.                     dec = is_ten(sub[i].second.first);
  141.                     ans = posit[i];
  142.                 }
  143.             }
  144.             if (sub[i].second.first > 1) {
  145.                 rem = posit[i];
  146.             }
  147.             else {
  148.                 rem2 = posit[i];
  149.             }
  150.         }
  151.         if (fublya) {
  152.             cout << 2 << ' ' << ans << endl;
  153.         }
  154.         else if (rem != -1)
  155.             cout << 2 << ' ' << rem << endl;
  156.         else {
  157.             cout << 2 << ' ' << rem2 << endl;
  158.         }
  159.     }
  160.     //mx
  161.  
  162.     ANS mx_ans = { 1,posit[0],sub[0].second.second };
  163.     bool tr = false;
  164.     ll pre_ans = -1e18;
  165.     for (ll i = 0; i < (ll)sub.size(); i++) {
  166.         if (sub[i].S.first > 1) {
  167.             ll f = 1;
  168.             while (f < sub[i].second.first)f *= 10;
  169.             f /= 10;
  170.             ll fir = sub[i].second.first / f;
  171.             fir *= f;
  172.             ll sec = sub[i].second.first - fir;
  173.             ll checker = 0;
  174.             checker += fir == 1;
  175.             checker += sec == 1;
  176.             ll checker2 = 0;
  177.             checker2 += sub[i].second.first / 2 == 1;
  178.             checker2 += sub[i].second.first / 2 + sub[i].second.first % 2 == 1;
  179.             if (fir == 0 || sec == 0 || cnt_of_num(fir) + cnt_of_num(sec) - checker < -checker2 + cnt_of_num(sub[i].second.first / 2) + cnt_of_num(sub[i].second.first / 2 + sub[i].second.first % 2)) {
  180.                 if (2 - checker2 + cnt_of_num(sub[i].second.first / 2) + cnt_of_num(sub[i].second.first / 2 + sub[i].second.first % 2) - sub[i].first > pre_ans) {
  181.                     pre_ans = 2 - checker2 + cnt_of_num(sub[i].second.first / 2) + cnt_of_num(sub[i].second.first / 2 + sub[i].second.first % 2) - sub[i].first;
  182.                     tr = true;
  183.                     mx_ans = { 1,posit[i] - (sub[i].second.first) / 2,no_sim(sub[i].second.second) };
  184.                     last = sub[i].S.first;
  185.                 }
  186.             }
  187.             else {
  188.                 if (cnt_of_num(fir) + cnt_of_num(sec) - sub[i].first > pre_ans) {
  189.                     pre_ans = 2 + cnt_of_num(fir) + cnt_of_num(sec) - sub[i].first - checker;
  190.                     tr = true;
  191.                     mx_ans = { 1,posit[i] - sec,no_sim(sub[i].second.second) };
  192.                 }
  193.             }
  194.         }
  195.  
  196.     }
  197.     pair<ll, pair<ll, char>> anss = { (ll)1,{mx_ans.pos, mx_ans.sl} };
  198.     for (ll i = 0; i < sub.size(); i++) {
  199.         if (is_ten_min(sub[i].second.first) && pre_ans < 1) {
  200.             anss.second.first = posit[i];
  201.             anss.second.second = sub[i].second.second;
  202.         }
  203.     }
  204.     cout << anss.F << ' ' << anss.S.F << ' ' << anss.S.S << endl;
  205. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement