萌新求救Manacher!!!
查看原帖
萌新求救Manacher!!!
164883
Zigh_Wang楼主2022/8/25 16:46

在这里插入图片描述 CF上报了这个错,但是我打死都想不到怎么错的。。。

#include<bits/stdc++.h>
#define ll long long
using namespace std;

const int MAXN = 1e6 + 5;
const int MOD = 998244353;

int inpt()
{
	int x = 0, f = 1;
	char ch;
	for(ch = getchar(); (ch < '0' || ch > '9') && ch != '-'; ch = getchar());
	if(ch == '-'){
		f = -1;
		ch = getchar();
	}
	do{
		x = (x << 3) + (x << 1) + ch - '0';
		ch = getchar();
	}while(ch >= '0' && ch <= '9');
	return f * x;
}

int n;
string str;
int ans = 0;

char ch[MAXN << 1];
int cnt = 0;
void init(int l, int r)
{
	cnt = 0;
	ch[0] = '&';
	while(l <= r) {
		ch[++cnt] = '#';
		ch[++cnt] = str[l++];
	}
	ch[++cnt] = '#';
	ch[++cnt] = '@';
}
int p[MAXN << 1];
bool opt = 0;
int pos = 0;
int doit()
{
	int val = 0;
	for(int i = 0; i <= cnt; i++)
		p[i] = 1;
	int mid = 0, r = 0;
	
	for(int i = 0; i <= cnt; i++) {
		if(i + p[(mid << 1) - i] > r)
			p[i] = r - i;
		else
			p[i] = p[(mid << 1) - i];
		
		while(ch[i - p[i]] == ch[i + p[i]])
			p[i]++;
		
		if(i + p[i] > r) {
			mid = i;
			r = i + p[i];
		}
		
		if(i - p[i] == 0 && p[i] - 1 >= val) {
			val = p[i] - 1;
			opt = 0;
		}
		if(i + p[i] == cnt && p[i] - 1 >= val) {
			val = p[i] - 1;
			opt = 1;
		}
	}
	return val;
}

int main()
{
	n = inpt();
	while(n--) {
		cin >> str;
		int len = str.size();
		ans = 0;
		
		if(len == 1) {
			printf("%c\n", str[0]);
			continue;
		}
		
		int l = 0, r = len - 1;
		for(; l < ((len + 1) >> 1); l++, r--)
			if(str[l] != str[r]) {
				l--, r++;
				break;
			}
		
		if(r - l > 1) {
			init(l + 1, r - 1);
			pos = doit();
		}else {
			pos = 0;
		}
		
		for(int i = 0; i <= l; i++)
			printf("%c", str[i]);
		if(!opt) {
			for(int i = l + 1, j = 1; j <= pos; i++, j++)
				printf("%c", str[i]);
		}else {
			for(int i = r - pos, j = 1; j <= pos; i++, j++)
				printf("%c", str[i]);
		}
		for(int i = max(r, l + 1); i < len; i++)
			printf("%c", str[i]);
		puts("");
	}
	
	return 0;
}
/*
1
ywowyovhrgradhtrqkgurkjpudnrrqhmmwiaqicfxnoyejdsmmurusdzqgjjntocryhqsgr

1
abcdqzba
*/
2022/8/25 16:46
加载中...