#示后人:如果你样例过了但WA 0pts
查看原帖
#示后人:如果你样例过了但WA 0pts
768270
__why楼主2024/7/27 11:57

看一下是不是用的string,如果是这样写的,喜提WA 0pts


#include<bits/stdc++.h>
using namespace std;
const int maxn = 3e7+5;
string s;
int ri[maxn],n,ans;
int main(){
	char c = getchar();
	s[0] = '#';
	while(c>='a'&&c<='z'){
		s[++n] = c;
		s[++n] = '#';
		c = getchar();
	}
	s[n] = '#';
	int l(0),r(0);
	for(int i = 1;i<=n;i++){
		if(l<=r)ri[i] = min(ri[l+r-i],r-i+1);
		while(i-ri[i]>=0&&i+ri[i]>=0&&s[i+ri[i]]==s[i-ri[i]])ri[i]++;
		if(i+ri[i]>r)r = i+ri[i] - 1,l = i-ri[i] + 1;
		ans = max(ans,ri[i]);
	}
	cout<<ans-1;
	return 0;
}

应改为


#include<bits/stdc++.h>
using namespace std;
const int maxn = 3e7+5;
char s[maxn];
int ri[maxn],n,ans;
int main(){
	char c = getchar();
	s[0] = '#';
	while(c>='a'&&c<='z'){
		s[++n] = c;
		s[++n] = '#';
		c = getchar();
	}
	s[n] = '#';
	int l(0),r(0);
	for(int i = 1;i<=n;i++){
		if(l<=r)ri[i] = min(ri[l+r-i],r-i+1);
		while(i-ri[i]>=0&&i+ri[i]>=0&&s[i+ri[i]]==s[i-ri[i]])ri[i]++;
		if(i+ri[i]>r)r = i+ri[i] - 1,l = i-ri[i] + 1;
		ans = max(ans,ri[i]);
	}
	cout<<ans-1;
	return 0;
}
2024/7/27 11:57
加载中...