Editorial for Upin and Ipin


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

Ta có:

  • Trong xâu con ~t~ phải có ít nhất một kí tự U và một kí tự I.
  • Để một trong hai người chiến thắng, ~cnt_\texttt{U} \geq 2 \cdot cnt_\texttt{I}~ hoặc ~cnt_\texttt{I} \geq 2 \cdot cnt_\texttt{U}~.

Từ hai điều kiện trên, ta suy ra ~|t| \geq 3~.

Dễ thấy trong một xâu con ~t~ bất kì độ dài ~3~ có chứa cả hai kí tự UI, ta có ~cnt_\texttt{U} = 1~ và ~cnt_\texttt{I} = 2~ hoặc ~cnt_\texttt{U} = 2~ và ~cnt_\texttt{I} = 1~ (thỏa mãn điều kiện để một trong hai người chiến thắng). Vì vậy, có thể chứng minh rằng nếu tồn tại xâu con ~t~ thỏa mãn yêu cầu, sẽ tồn tại phương án chọn xâu con ~t~ có độ dài bằng ~3~.

Để tìm xâu con ~t~ thỏa mãn yêu cầu, ta duyệt tất cả các xâu con độ dài ~3~ của ~s~ và kiểm tra.

#include <bits/stdc++.h>

using namespace std;

int main() {
    int t;
    cin >> t;
    for (int test = 1; test <= t; ++test) {
        string s;
        cin >> s;
        int n = s.length();
        bool found = false;
        for (int i = 0; i + 2 < n; ++i) {
            int sum = 0;
            for (int j = i; j < i + 3; ++j) {
                sum += (s[j] == 'U') ? 1 : -1;
            }
            if (sum == -1 || sum == 1) {
                found = true;
                cout << "Yes " << i + 1 << " " << i + 3 << "\n";
                break;
            }
        }
        if (!found) {
            cout << "No\n";
        }
    }
}

Comments

Please read the guidelines before commenting.


There are no comments at the moment.