题解 CF1867B XOR Palindromes
RemiliaScar1et · · 题解
XOR Palindromes
题目大意
给出一个长度为
对于给出的一组
题目中
回文串指正着读反着读都相同的字符串,比如
首先我们注意到,一个
所以其实好数就是存在一种方案对
首先我们可以想到 求出最少的修改次数
其次我们可以想到,在上面 范围内的任意
继续思考就会发现问题:如果
对于一个长度
所以,我们可以按照如下方法判断:
首先求出将
然后对于一个整数
-
若
x 在范围[x_0,n-x_0] 内且n 是奇数时,x 是好数。 -
若
x 在范围[x_0,n-x_0] 内且n 是偶数时,如果x 的奇偶性与x_0 相同,则x 是好数。 -
其他都不是好数。
考场code:
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int s[N];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
char tmp[N];
scanf("%s",tmp);
for(int i=0;i<n;i++)
{
s[i+1]=(int)(tmp[i]=='1');
}
int h1=0;
for(int i=1;i<=n/2;i++)
if(s[i]!=s[n-i+1]) h1++;
if(n&1)//奇数
{
for(int i=0;i<=n;i++)
if(h1<=i&&i<=n-h1) printf("1");
else printf("0");
}
else {//偶数
for(int i=0;i<=n;i++)
if(h1<=i&&i<=n-h1&&(i&1)==(h1&1)) printf("1");
else printf("0");
}
printf("\n");
}
return 0;
}