回文串 | ||||||
| ||||||
Description | ||||||
现在我们有一个很长很长的字符串,并且我们将有两种操作。 C i y:将第i个字符变成y Q i j:检查第i个字符到第j个字符是否为一个回文串 | ||||||
Input | ||||||
输入的第一行是一个整数T,表示一共有T组测试数据; 对于每组测试数据,第一行包含一个字符串长度不超过1000000。 接下来一行为一个整数N代表操作次数。N不超过1000000 接下来N行包含一种操作。 所有的字母都是小写字母。 | ||||||
Output | ||||||
对于每种操作,如果相应的字符串为回文串输出"yes",后则输出"no"。 | ||||||
Sample Input | ||||||
1 aaaaa 4 Q 1 5 C 2 b Q 1 5 Q 1 3 | ||||||
Sample Output | ||||||
yes no yes | ||||||
Author | ||||||
陈禹@HRBUST 先在这对不明真相的分享代码的同学说抱歉,board没看见删除功能,你的代码是对的。。。输入越界太扯了。。。。 题解: 没给T范围,给了操作数,感觉暴力可解,交一发WA了,然后无脑WA,后来看分享才知道,需要带技巧的暴力。Q操作,我们将string 分为两个半,反转其中一个,如果yes,我们记录这个回文串的头和尾。这样下次Q操作时,如果给的区间在之前回文串的内部话,如果是对称的,直接yes。C操作,如果修改的位置在之前回文串的区间,注意将L=R。 代码:
|