anon20016

D Ординальные числа

Nov 15th, 2019
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. #define _CRT_SECURE_NO_DEPRECATE
  2.  
  3. #include <iostream>
  4. #include <vector>
  5. #include <string>
  6. #include <map>
  7. #include <set>
  8. #include <algorithm>
  9.  
  10. #define li long long
  11.  
  12. using namespace std;
  13.  
  14. vector<string> a;
  15.  
  16. void build() {
  17. a.push_back("{}");
  18. for (int i = 0; i < 19; i++) {
  19. //random_shuffle(a.begin(), a.end());
  20. string s = "{";
  21. for (int j = 0; j < a.size(); j++) {
  22. s = s + a[j];
  23. if (j != a.size() - 1) {
  24. s = s + ",";
  25. }
  26. }
  27. s += "}";
  28. a.push_back(s);
  29. }
  30. for (int i = 0; i < a.size(); i++) {
  31. cout << a[i].size() << ", ";
  32. }
  33. }
  34.  
  35. vector<int> t = { 2, 4, 9, 19, 39, 79, 159, 319, 639, 1279, 2559, 5119, 10239, 20479, 40959, 81919, 163839, 327679, 655359, 1310719 };
  36. pair<int, char> ans;
  37.  
  38. void gen(string s, int l, int R) {
  39. if (s[l] == '{' && s[R] == '}') {
  40. int r = l + 1;
  41. bool f = 1;
  42. while (f) {
  43. f = 0;
  44. for (int i = 0; i < t.size(); i++) {
  45. if (r + t[i] < s.size() && s[r + t[i]] == ',' && r + t[i] < R && s[r] == '{' && s[r + t[i] - 1] == '}') {
  46. r += t[i] + 1;
  47. f = 1;
  48. break;
  49. }
  50. }
  51. }
  52.  
  53. for (int i = 0; i < t.size(); i++) {
  54. if (r + t[i] - 1 < s.size() && s[r + t[i] - 1] == ',' || r + t[i] - 1 == R) {
  55. gen(s, r, r + t[i] - 2);
  56. }
  57. }
  58. }
  59. else {
  60. if (s[l] != '{') {
  61. ans = { l, '{' };
  62. }
  63. else {
  64. ans = { R + 1, '}' };
  65. }
  66. }
  67. }
  68.  
  69. int main() {
  70. freopen("input.txt", "r", stdin);
  71. freopen("output.txt", "w", stdout);
  72. //build();
  73.  
  74. string s;
  75. getline(cin, s);
  76. int open = 0;
  77. int close = 0;
  78. for (int i = 0; i < s.size(); i++) {
  79. if (s[i] == '{') {
  80. open++;
  81. }
  82. if (s[i] == '}') {
  83. close++;
  84. }
  85. }
  86. ans = { -1, ' ' };
  87.  
  88. if (open == close) {
  89. for (int i = 0; i < s.size(); i++) {
  90. if (s[i] == '}' && s[i + 1] == '{') {
  91. ans = { i + 1, ',' };
  92. }
  93. }
  94. }
  95. else {
  96. gen(s, 0, s.size() - 1);
  97. }
  98. cout << s.substr(0, ans.first) << ans.second << s.substr(ans.first, s.size() - ans.first);
  99.  
  100. }
Add Comment
Please, Sign In to add comment