fork download
  1. #include<iostream>
  2. #include<vector>
  3. #include<map>
  4. #include<algorithm>
  5. using namespace std;
  6.  
  7. int main(){
  8. int t;
  9. cin >> t;
  10. while(t--){
  11. string s;
  12. int a, b, ab, ba, suma = 0, sumb = 0;
  13. cin >> s >> a >> b >> ab >> ba;
  14. int n = s.size();
  15. vector<vector<int> > v(n, vector<int>(4, 0));
  16. if(n > 1 && s[0] == 'A' && s[1] == 'B')v[1][0] ++;
  17. if(n > 1 && s[0] == 'B' && s[1] == 'A')v[1][1] ++;
  18. if(n > 1)v[1][2] = v[1][0] + v[1][1];
  19. for(int i = 0; i < n; i++){
  20. if(s[i] == 'A')suma++;
  21. if(s[i] == 'B')sumb++;
  22. }
  23. for(int i = 2; i < n; i++){
  24. v[i][0] = v[i-1][0];
  25. v[i][1] = v[i-1][1];
  26. v[i][2] = v[i-1][2];
  27. if(s[i-1] == 'A' && s[i] == 'B'){
  28. v[i][0] = max(v[i][0], v[i-2][0]+1);
  29. v[i][2] = max(v[i][2], v[i-2][2]+1);
  30. }
  31. if(s[i-1] == 'B' && s[i] == 'A'){
  32. v[i][1] = max(v[i][1], v[i-2][1]+1);
  33. v[i][2] = max(v[i][2], v[i-2][2]+1);
  34. }
  35. }
  36. for(int i = 0; i < n; i++){
  37. cout << v[i][0] << " " << v[i][1] << " " << v[i][2] << endl;
  38. }
  39. int x = min(v[n-1][2], min(v[n-1][0], ab) + min(v[n-1][1], ba));
  40. if(x + a < suma || x + b < sumb)cout << "No\n";
  41. else cout << "Yes\n";
  42. }
  43. }
Success #stdin #stdout 0.01s 5272KB
stdin
1
ABAB
0 0 3 3

stdout
0 0 0
1 0 1
1 1 1
2 1 2
Yes