CF1650A Deletions of Two Adjacent Letters 题解

· · 题解

题目要求判断是否可以通过每次删除两个字符,使字符串变成给定的字符。

我们发现可以先从前往后扫描,如果某个字符等于给定的字符,并且这个字符在奇数位,那么就有可能通过两个两个删除字符来达到目的。

又因为字符串是奇数位数的,所以如果上述条件成立,从后往前删也可以达到目的。

#include<bits/stdc++.h>
using namespace std;
int main(){
  ios::sync_with_stdio(false);
  int t; cin>>t;
  while(t--){
    string s; char c; bool f=true; cin>>s>>c;
    for(int i=0;i<s.length()&&f;i++){ // 从前往后扫描
      if(s[i]==c&&!(i&1) /* 因为字符串是从 0 开始往后存储的,所以判断的是偶数 */ )f=false;
    }
    cout<<(f?"NO\n":"YES\n"); // 判断是否能达到目的
  }
  return 0;
}