https://codeforces.com/contest/1671/problem/A
input
8
aaaabbb
bbaaaaabbb
aaaaaa
abab
a
b
aaaab
bbaaa
output
YES
YES
YES
NO
NO
NO
NO
YES
题意
询问是否能通过使用
a
a
aa
aa ,
b
b
bb
bb ,
a
a
a
aaa
aaa ,
b
b
b
bbb
bbb 这四种字串拼凑来获得给定字符串
思路
其实相当于拆分成一个个连续
a
a
a 串和
b
b
b 串
x
∗
2
+
y
∗
3
>
=
2
x * 2 + y * 3 >= 2
x∗2+y∗3>=2,其中
x
x
x 或
y
y
y 至少一个大于
0
0
0,即只要出现的串中,
a
a
a 与
b
b
b 部分拆分开来的子长度必须大于
1
1
1 才能构造
所以我们只要判断一个位置上,如果两侧都与自身不相等则就是 N O NO NO
AC代码
对于第一个与最后一个位置上不想特判,则在string的两个尽头补一个与尽头不相等的字符即可
#include <bits/stdc++.h>
#define endl '\n'
#define AC return 0;
using namespace std;
//#define ll long long
//#define int long long
void slove()
{
string s;
cin >> s;
int n = s.length();
s = (s[0] == 'a' ? 'b' : 'a') + s + (s[n - 1] == 'a' ? 'b' : 'a');
for(int i = 1; i <= n; i++)
if(s[i] != s[i - 1] && s[i] != s[i + 1])
{
cout << "NO" << endl;
return;
}
cout << "YES" << endl;
}
signed main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int T;cin >> T; while(T--)
slove();
AC
}