Advertisement
Alex-Flexer

Untitled

Aug 29th, 2024
9
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.27 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <string>
  4. #include <queue>
  5. #include <map>
  6. #include <bitset>
  7. #include <vector>
  8. #include <set>
  9. #include <cmath>
  10. #include <iomanip>
  11. #include <algorithm>
  12. #include <fstream>
  13. #include <unordered_map>
  14. #include <stack>
  15.  
  16. typedef long long ll;
  17. using namespace std;
  18.  
  19. const ll inf = 1e18;
  20.  
  21. ll num_len(ll n)
  22. {
  23. int cnt = 0;
  24. while (n > 0)
  25. {
  26. n /= 10;
  27. ++cnt;
  28. }
  29. return cnt;
  30. }
  31.  
  32. bool is_10_powered(ll n)
  33. {
  34. while (n >= 10)
  35. {
  36. if (n % 10 != 0)
  37. return false;
  38. n /= 10;
  39. }
  40. return n == 1;
  41. }
  42.  
  43. bool first_way(ll n)
  44. {
  45. // [2*10^n; 10^(n + 1)]
  46. if (n <= 10 || is_10_powered(n - 1))
  47. return true;
  48. // get first digit
  49. while (n >= 10)
  50. n /= 10;
  51. return n > 1;
  52. }
  53.  
  54. int main()
  55. {
  56. string s;
  57. cin >> s;
  58. vector<pair<ll, char>> v;
  59. ll cnt = 0;
  60. int n = s.size();
  61. for (int i = 0; i < n; i++)
  62. {
  63. if (isalpha(s[i]))
  64. {
  65. v.push_back(make_pair(max(1LL, cnt), s[i]));
  66. cnt = 0;
  67. }
  68. else
  69. cnt = cnt * 10 + s[i] - '0';
  70. }
  71. // minimize
  72. ll m = v.size();
  73. ll mn = m;
  74. ll idx = -1;
  75. for (int i = 1; i < m - 1; i++)
  76. {
  77. if (v[i - 1].second == v[i + 1].second && v[i].first == 1)
  78. {
  79. ll sum = v[i - 1].first + v[i + 1].first;
  80. ll delt_nums_len = num_len(v[i - 1].first) + num_len(v[i + 1].first) - num_len(sum);
  81. ll new_len = m - 2 - delt_nums_len;
  82. if (new_len < mn)
  83. {
  84. mn = new_len;
  85. idx = i;
  86. }
  87. }
  88. }
  89. if (idx == -1)
  90. {
  91. for (int i = 0; i < m; i++)
  92. {
  93. if (is_10_powered(v[i].first) && m - 1 < mn)
  94. {
  95. mn = m - 1;
  96. idx = i;
  97. break;
  98. }
  99. }
  100. }
  101. if (idx == -1)
  102. cout << 2 << ' ' << 1;
  103. else
  104. {
  105. ll sum = 0;
  106. for (ll i = 0; i <= idx; i++)
  107. sum += v[i].first;
  108. cout << 2 << ' ' << sum;
  109. }
  110. cout << endl;
  111.  
  112. // maximaze
  113. ll mx = m;
  114. idx = -1;
  115. char type = 'n';
  116. for (int i = 0; i < m; i++)
  117. {
  118. if (first_way(v[i].first))
  119. {
  120. if (m + 2 > mx)
  121. {
  122. mx = m + 2;
  123. idx = i;
  124. type = 'b';
  125. }
  126. }
  127. else if (v[i].first > 1)
  128. {
  129. mx = m + 3;
  130. idx = i;
  131. type = 'g';
  132. break;
  133. }
  134. }
  135. if (idx == -1)
  136. {
  137. if (v.back().second != 'A')
  138. cout << 1 << ' ' << n << ' ' << 'A';
  139. else if (v.back().second != 'C')
  140. cout << 1 << ' ' << n << ' ' << 'C';
  141. else if (v.back().second != 'G')
  142. cout << 1 << ' ' << n << ' ' << 'G';
  143. else if (v.back().second != 'T')
  144. cout << 1 << ' ' << n << ' ' << 'T';
  145. }
  146. else
  147. {
  148. if (type == 'g')
  149. {
  150. ll len = num_len(v[idx].first);
  151. ll sum = 0;
  152. for (ll i = 0; i < idx; i++)
  153. sum += v[i].first;
  154. sum += pow(10, len - 1);
  155. if (v[idx].second != 'A')
  156. cout << 1 << ' ' << sum << ' ' << 'A';
  157. else if (v[idx].second != 'C')
  158. cout << 1 << ' ' << sum << ' ' << 'C';
  159. else if (v[idx].second != 'G')
  160. cout << 1 << ' ' << sum << ' ' << 'G';
  161. else if (v[idx].second != 'T')
  162. cout << 1 << ' ' << sum << ' ' << 'T';
  163. }
  164. else
  165. {
  166. ll sum = 0;
  167. for (ll i = 0; i <= idx; i++)
  168. sum += v[i].first;
  169. sum -= 2;
  170. if (v[idx].second != 'A')
  171. cout << 1 << ' ' << sum << ' ' << 'A';
  172. else if (v[idx].second != 'C')
  173. cout << 1 << ' ' << sum << ' ' << 'C';
  174. else if (v[idx].second != 'G')
  175. cout << 1 << ' ' << sum << ' ' << 'G';
  176. else if (v[idx].second != 'T')
  177. cout << 1 << ' ' << sum << ' ' << 'T';
  178. }
  179. }
  180. }
  181.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement