CF-794补题
D题(一整个没想法,那就看题解吧!)


#include <bits/stdc++.h> using namespace std; typedef long long ll; void test_case() { int a, b, c, d; cin >> a >> b >> c >> d; string s; cin >> s; int cntA = count(s.begin(), s.end(), 'A'); if (cntA != c + d + a) { cout << "NO\n"; return; } int baseline = 0; vector<int> favA, favB; int n = s.size(); for (int i = 0; i < n; i++) { int j = i; while (j < n && (s[j] != s[i]) == ((j - i) & 1)) ++j; int len = j - i; if (len == 1)//连续两个字母相同 { continue; } baseline += (len - 1)/2;//ABAB baseline+1; ABABA baseline+2; if (len % 2 == 0) { if (s[i] == 'A') favA.push_back(len/2); else favB.push_back(len/2); } i = j - 1; } sort(favA.begin(), favA.end()); sort(favB.begin(), favB.end()); for (int i : favA) { if (i > c) break; baseline -= (i - 1); c -= i; } for (int i : favB) { if (i > d) break; baseline -= (i - 1); d -= i; } cout << (baseline >= (c + d) ? "YES" : "NO") << endl; } int main() { int tests; cin >> tests; while (tests--) { test_case(); } return 0; }

浙公网安备 33010602011771号