这一场打的又很差(掉分预定),D题想不出来。

A. Déjà Vu

这题首先判断字符串是否全由 a 组成,如果是的话输出 NO

  1. int main() {
  2. ios_base::sync_with_stdio(false), cin.tie(0);
  3. int _;
  4. for (cin >> _; _--;) {
  5. string s;
  6. cin >> s;
  7. int N = s.length();
  8. // find_first_not_of
  9. auto i = s.find_first_not_of('a');
  10. if (i == string::npos) {
  11. cout << "NO\n";
  12. continue;
  13. }
  14. int j = (i < N / 2 ? N - i : N - i - 1);
  15. cout << "YES\n";
  16. cout << s.substr(0, j) << 'a' << s.substr(j) << "\n";
  17. }
  18. return 0;
  19. }

B. Flip the Bits

题意:给你一个 01 初始序列和目标序列,每次可以选择前 Codeforces Round #712 (Div. 2) 个人题解 - 图1 个位置异或1(前提是选择区域的0和1个数相等),问你有没有办法变成目标序列。

思路:待补

  1. int main() {
  2. ios_base::sync_with_stdio(false), cin.tie(0);
  3. int _;
  4. for (cin >> _; _--;) {
  5. int n;
  6. string a, b;
  7. cin >> n >> a >> b;
  8. int sa = 0, sb = 0;
  9. bool f = true;
  10. for (int i = 0; i < n; ++i) {
  11. sa += 2 * (a[i] - '0') - 1;
  12. sb += 2 * (b[i] - '0') - 1;
  13. // cout << sa << " " << sb << "\n";
  14. f = f && abs(sa) == abs(sb);
  15. }
  16. // cout << sa << " " << sb << "\n";
  17. f = f && sa == sb;
  18. cout << (f ? "YES\n" : "NO\n");
  19. }
  20. return 0;
  21. }

C. Balance the Bits

题意:给你一个01序列,问你能不能构造两个合法的括号序列a,b,使得当 Codeforces Round #712 (Div. 2) 个人题解 - 图2 时,Codeforces Round #712 (Div. 2) 个人题解 - 图3 ,当 Codeforces Round #712 (Div. 2) 个人题解 - 图4 时,Codeforces Round #712 (Div. 2) 个人题解 - 图5

思路:首先,两个字符串序列必须以( 开头,) 结尾,其实,由于 ()的个数和 Codeforces Round #712 (Div. 2) 个人题解 - 图6 为偶数所以 Codeforces Round #712 (Div. 2) 个人题解 - 图7 序列中 1 的个数也必为偶数。

接下来就是模拟条件了

AC 代码

  1. int main() {
  2. ios_base::sync_with_stdio(false), cin.tie(0);
  3. int _;
  4. for (cin >> _; _--;) {
  5. int n, t = 0;
  6. string s;
  7. cin >> n >> s;
  8. int cnt = count(s.begin(), s.end(), '1');
  9. if (s[0] != '1' || s[n - 1] != '1' || cnt & 1) {
  10. cout << "NO\n";
  11. continue;
  12. }
  13. cnt /= 2;
  14. string a(n, '*'), b(n, '*');
  15. for (int i = 0; i < n; ++i) {
  16. if (s[i] == '0') {
  17. if (t == 0) a[i] = ')', b[i] = '(';
  18. else
  19. a[i] = '(', b[i] = ')';
  20. t ^= 1;
  21. } else {
  22. if (cnt) {
  23. a[i] = b[i] = '(';
  24. cnt--;
  25. } else
  26. a[i] = b[i] = ')';
  27. }
  28. }
  29. cout << "YES\n";
  30. cout << a << "\n"
  31. << b << '\n';
  32. }
  33. return 0;
  34. }