fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define ll long long
  6. #define ull unsigned long long
  7. #define initial first
  8. #define added second
  9. #define sort_all(v) sort(v.begin(), v.end())
  10.  
  11. #define ya_sayed_ya_badawy \
  12.   ios_base::sync_with_stdio(false); \
  13.   cin.tie(NULL);
  14.  
  15. const int MAX = 500 + 50;
  16. int MOD = 1e9 + 7;
  17. const int OO = 1e9;
  18. const double EPS = (double)1e-9;
  19.  
  20. int add(ll a, ll b)
  21. {
  22. return ((a % MOD) + (b % MOD)) % MOD;
  23. }
  24.  
  25. int mul(ll a, ll b)
  26. {
  27. return ((a % MOD) * (b % MOD)) % MOD;
  28. }
  29.  
  30. void solve()
  31. {
  32. int n, a, b, c;
  33. cin >> n >> a >> b >> c;
  34.  
  35. int total_required = a + b + c;
  36. int max_allowed = (n + 1) / 2;
  37.  
  38. if (total_required > n || max({a, b, c}) > max_allowed)
  39. {
  40. cout << -1;
  41. return;
  42. }
  43.  
  44. string res = "";
  45. char last_used = '#';
  46. int required_remaining = total_required;
  47. bool valid = true;
  48.  
  49. for (int i = 0; i < n; ++i)
  50. {
  51. if (required_remaining > 0)
  52. {
  53. vector<pair<int, char>> candidates;
  54. if (a > 0 && last_used != 'R')
  55. candidates.emplace_back(-a, 'R');
  56. if (b > 0 && last_used != 'G')
  57. candidates.emplace_back(-b, 'G');
  58. if (c > 0 && last_used != 'B')
  59. candidates.emplace_back(-c, 'B');
  60.  
  61. if (candidates.empty())
  62. {
  63. valid = false;
  64. break;
  65. }
  66.  
  67. sort_all(candidates);
  68. char chosen = candidates[0].second;
  69. res += chosen;
  70. last_used = chosen;
  71.  
  72. if (chosen == 'R')
  73. --a;
  74. else if (chosen == 'G')
  75. --b;
  76. else
  77. --c;
  78.  
  79. --required_remaining;
  80. }
  81. else
  82. {
  83. vector<char> available;
  84. if (last_used != 'R')
  85. available.push_back('R');
  86. if (last_used != 'G')
  87. available.push_back('G');
  88. if (last_used != 'B')
  89. available.push_back('B');
  90.  
  91. if (available.empty())
  92. {
  93. valid = false;
  94. break;
  95. }
  96.  
  97. res += available[0];
  98. last_used = available[0];
  99. }
  100. }
  101.  
  102. if (valid && res.size() == n)
  103. {
  104. for (int i = 1; i < n; ++i)
  105. {
  106. if (res[i] == res[i - 1])
  107. {
  108. valid = false;
  109. break;
  110. }
  111. }
  112. }
  113.  
  114. if (valid && res.size() == n)
  115. cout << res;
  116. else
  117. cout << -1;
  118. }
  119.  
  120. signed main()
  121. {
  122. ya_sayed_ya_badawy int t = 1;
  123. cin >> t;
  124.  
  125. while (t--)
  126. {
  127. solve();
  128. if (t != 0)
  129. {
  130. cout << endl;
  131. }
  132. }
  133. return 0;
  134. }
  135.  
Success #stdin #stdout 0.01s 5304KB
stdin
Standard input is empty
stdout
-1