fork download
  1. #include<iostream>
  2. #include<vector>
  3. #include<algorithm>
  4. using namespace std;
  5.  
  6. int main(){
  7. ios::sync_with_stdio(false);
  8. cin.tie(nullptr);
  9. int t;
  10. cin >> t;
  11. while(t--){
  12. int a, b, ab, ba, suma, sumb, con = 0, cur = 0;
  13. string s;
  14. vector<int> AB, BA, X;
  15. cin >> s >> a >> b >> ab >> ba;
  16.  
  17. for(int i = 0; i < s.size(); i++){
  18. if(s[i] == 'A')a--;
  19. if(s[i] == 'B')b--;
  20. if(i == 0 || s[i] == s[i-1]){
  21. if(con % 2)X.push_back(con / 2);
  22. else{
  23. if(cur)BA.push_back(con / 2);
  24. else AB.push_back(con / 2);
  25. }
  26. if(s[i] == 'A')cur = 0;
  27. if(s[i] == 'B')cur = 1;
  28. con = 1;
  29. }
  30. else{
  31. con++;
  32. }
  33. }
  34.  
  35. // 在迴圈結束後處理最後的 con
  36. if(con % 2) X.push_back(con / 2);
  37. else {
  38. if(cur) BA.push_back(con / 2);
  39. else AB.push_back(con / 2);
  40. }
  41.  
  42. sort(BA.begin(), BA.end());
  43. sort(AB.begin(), AB.end());
  44. sort(X.begin(), X.end());
  45.  
  46. auto processVector = [&](vector<int>& vec, int& a, int& b, int& ab, int& ba) {
  47. for(int i = 0; i < vec.size(); i++){
  48. cout << vec[i] << " ";
  49. if(ba >= vec[i]){
  50. ba -= vec[i];
  51. a += vec[i];
  52. b += vec[i];
  53. }
  54. else if(ab >= vec[i]){
  55. ab -= vec[i];
  56. a += vec[i];
  57. b += vec[i];
  58. }
  59. }
  60. cout << endl;
  61. };
  62.  
  63. processVector(BA, a, b, ab, ba);
  64. processVector(AB, a, b, ab, ba);
  65. cout << a << b << endl;
  66.  
  67. processVector(X, a, b, ab, ba);
  68.  
  69. if(a < 0 || b < 0)cout << "No\n";
  70. else cout << "Yes\n";
  71. }
  72.  
  73. }
Success #stdin #stdout 0s 5296KB
stdin
7
A
0 0 10 10
B
0 1 0 0
ABA
0 0 1 1
ABBABAAB
5 5 0 0
ABABBAABBAAB
1 1 2 3
ABBBBAB
0 3 2 0
BAABBA
1 3 2 0
stdout
0 
-10
0 
No

0 
00
0 
Yes

0 
-2-1
1 
No
2 
0 1 1 
11

Yes
1 1 
0 1 1 2 
-1-1

No

0 1 
-1-1
0 0 1 
Yes
1 1 
0 1 
02

Yes