Deletions of Two Adjacent Letters-Codeforces

投稿日: 更新日:

問題リンク-Deletions of Two Adjacent Letters

問題

長さが奇数の文字列ssが与えられます。長さが11になるまで以下の操作を繰り返します。

任意の隣接する2文字をssから選び削除する。つまり、s=s1s2...sns = s_1s_2...s_nに対し任意のi(1i<n)i(1 \leqq i < n)に対し操作を行うとs=s1s2...si1si+2...sns = s_1s_2...s_{i-1}s_{i+2}...s_nとなる。

文字列ssと文字ccが与えらるので操作終了後s=cs = cとできるか判定してください。

解法

ssii番目の文字を残すとします。s1...si1sisi+1...sns_1...s_{i-1}s_is_{i+1}...s_nと文字列を示した時、sis_iの前後にあるs1...si1s_1...s_{i-1}si+1...sns_{i+1}...s_nを削除する必要があります。2個づつ削除できるためどちらも偶数でなければなりません。
したがって、残す文字列の前後が偶数個か判定すれば良いです。

実装

#include <bits/stdc++.h>
using namespace std;

void solve(){
    string s;
    char c;
    cin >> s >> c;

    int n = s.length();
    int count_l = 0, count_r = n-1;
    for(int i = 0;i < n; ++i){
        if(s[i] == c){
            if(count_l%2 == 0 && count_r%2 == 0){
                cout << "YES" << endl;
                return;
            }  
        }
        count_l++;
        count_r--;
    }
    cout << "NO" << endl;
}

int main(){
    int t;
    cin >> t;
    while(t--){
        solve();
    }
    return 0;
}

書いた人

profile_image

お茶の葉

物理とプログラミングが好きな人