我整了一会,发现好像随机化插入那个a的正确率还不错?(雾
然后写了一发随机算法但是WA掉了
有没有大佬看看我的这个哪里错了或者是被毒瘤数据hack掉了,还是思路错了?
附代码:
#define maxn 300005
#define inf 0x3f3f3f3f
char a[maxn];
int t;
inline int random(const int x){
return 1ll*rand()*rand()%x;
}
inline bool check(const char jim[],const int len){//这个函数是检查jim数组是不是回文,不是返回真,否则为假
for(int i=0,j=len-1;i<(len<<1)+1;i++,j--)
if(jim[i]!=jim[j])
return true;
return false;
}
inline bool work(const int len){
int tag=0;
for(int i=0;i<len;i++)
if(a[i]!='a')
tag=1;
if(tag==0)
return false;
// int c=check(a,len);
// if(!c){
// puts("YES");
// putchar('a');
// for(int i=0;i<len;i++)
// putchar(a[i]);
// putchar('\n');
// return true;
// }
// if(len%2==0){
// puts("YES");
// for(int i=0;i<len;i++){
// if(i==(len/2))
// putchar('a');
// putchar(a[i]);
// }
// putchar('\n');
// return true;
// }
// if(len%2==1){
puts("YES");
int qwq=0;
while(!qwq){
int rrr=random(len);//随机插入
char cp[maxn];
for(int i=0,j=0;i<len+1;i++,j++){
cp[i]=a[j];//复制一遍
if(i==rrr)
cp[++i]='a';
}
if(check(cp,len+1)){//检查一下是不是合法,不合法就再随机一发
for(int i=0;i<len+1;i++)
putchar(cp[i]);
putchar('\n');
qwq=1;
}
}
return true;
// }
}
signed main(){
srand((unsigned)time(0));
t=read();
while(t--){
scanf("%s",a);
int len=std::strlen(a);
if(!work(len)){
puts("NO");
continue;
}
}
return 0;
}