收获:
1、临界情况检查
2、讨论小数据边量,从中查漏补缺
#include <cstdio>
using namespace std;
char st[1010];
int n;
int main(){
while(scanf("%d",&n)!=EOF){
scanf("%s",st);
if(n==1){
printf("QwQ\n");
continue;
}
int i,j;
int cnt=0;
bool flag=true;
if(n%2&&st[n/2]=='?')
st[n/2]='a';
for(i=0,j=n-1;i<=j;i++,j--){
if(st[i]=='?')
cnt++;
if(st[j]=='?'&&j!=i)
cnt++;
if(st[i]=='?'||st[j]=='?')
continue;
if(st[i]!=st[j])
flag=false;
}
if(!flag){
for(int i=0;i<n;i++){
if(st[i]!='?')
printf("%c",st[i]);
else
printf("a");
}
printf("\n");
}
else{
if(cnt==0||(cnt==1&&st[n/2]=='?'&&(n%2))){
printf("QwQ\n");
continue;
}
else{
int i;
for(i=n-1;i>=0;--i){
if(st[i]=='?')
break;
}
for(--i;i>=0;--i){
if(st[i]=='?')
st[i]='a';
}
bool flag=false;
for(int i=0;i<n;++i){
if(st[i]=='?'||st[n-1-i]=='?')
continue;
if(st[i]!=st[n-1-i]){
flag=true;
break;
}
}
for(int i=0;i<n;i++){
if(st[i]!='?')
printf("%c",st[i]);
else{
if(flag)
printf("a");
else{
if(st[n-1-i]=='a')
printf("b");
else
printf("a");
}
}
}
printf("\n");
}
}
}
return 0;
}