\(\text{Description}\)
多组询问,每次给定一个长度为 \(n\) 的字符串,求一种方案使得加入一个字符 a
后使其不是回文串,无解输出 NO
限制
\(1\le T \le 10^4,1\le \sum n \le3\times 10^5\)
\(\text{Solution}\)
由于 \(n\) 的范围比较小,我们可以考虑枚举 a
出现的位置,然后判断加入之后是否是回文串即可。
如何判断回文串?
只要在 a
的对应位置不是 a
就不是回文串。
时间复杂度:\(\Theta(\sum n)\)
\(\text{Code}\)
inline void solve() {
int pos = 0 ;
const int len = strlen(s+1) ;
for(int i = 1;i <= len;++i) if(s[len+1-i] != 'a') { pos = i ;break;}//寻找位置,找到一个就可以
if(!pos) return cout << "NO\n",void() ;
cout << "YES\n" ;
for(int i = 1;i < pos;++i) cout << s[i] ;
cout << 'a' ;
for(int i = pos;i <= len;++i) cout << s[i] ;
cout << '\n' ;
}