CF1789B Serval and Inversion Magic
题目描述
Serval 有一个只包含 $0$ 和 $1$ 的字符串 $s$,长度为 $n$。第 $i$ 个字符记为 $s_i$,其中 $1\leq i\leq n$。
Serval 可以对字符串 $s$ 执行如下操作,称为“反转魔法”:
- 选择一个区间 $[l, r]$($1\leq l\leq r\leq n$)。对于 $l\leq i\leq r$,如果 $s_i$ 是 $0$,则将其变为 $1$;如果 $s_i$ 是 $1$,则将其变为 $0$。
例如,若 $s=010100$,选择区间 $[2,5]$,则执行反转魔法后 $s$ 变为 $001010$。
Serval 想要通过恰好执行一次反转魔法,使得 $s$ 变为回文串。请你帮他判断是否有可能。
一个字符串是回文串,当且仅当它正着读和反着读都相同。例如,$010010$ 是回文串,但 $10111$ 不是。
输入格式
每组测试数据包含多组测试用例。第一行包含一个整数 $t$($1\leq t\leq 10^4$),表示测试用例的数量。
每组测试用例的第一行包含一个整数 $n$($2\leq n\leq 10^5$),表示字符串 $s$ 的长度。
第二行包含一个长度为 $n$ 的二进制字符串 $s$,仅包含字符 $0$ 和 $1$。
保证所有测试用例中 $n$ 的总和不超过 $2\cdot 10^5$。
输出格式
对于每组测试用例,如果可以通过恰好一次反转魔法使 $s$ 变为回文串,输出 Yes,否则输出 No。
你可以用任意大小写形式输出 Yes 和 No(例如 yEs、yes、Yes、YES 都会被识别为肯定回答)。
说明/提示
在第一个测试用例中,Serval 可以对区间 $[1,4]$ 执行反转魔法,$s$ 变为 $0110$。
在第二个测试用例中,Serval 可以对区间 $[1,3]$ 执行反转魔法,$s$ 变为 $01110$。
在第三个测试用例中,Serval 无法通过恰好一次反转魔法将 $s$ 变为回文串。
由 ChatGPT 4.1 翻译