关于昨天晚上CF Div2 T1 逮虾户(是这么翻译吗?
  • 板块灌水区
  • 楼主一铭君一
  • 当前回复9
  • 已保存回复9
  • 发布时间2021/4/4 08:34
  • 上次更新2023/11/5 01:04:30
查看原帖
关于昨天晚上CF Div2 T1 逮虾户(是这么翻译吗?
307143
一铭君一楼主2021/4/4 08:34

我整了一会,发现好像随机化插入那个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;
}
2021/4/4 08:34
加载中...