社区讨论

有点诡异

P1723高手过愚人节参与者 4已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@mhjsbaj5
此快照首次捕获于
2025/11/04 07:42
4 个月前
此快照最后确认于
2025/11/04 07:42
4 个月前
查看原帖
开long long也能过,但是我每次memset一遍就MLE,不memset就AC
MLE 0pts:
CPP
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<cstring>
#define int long long
using namespace std;
int len,ans,d[90000005],l,r;
string a;
string s;
void m(){
	memset(d,0,sizeof(d));
	s = '$';
	for(int i = 0;i < (int)a.size();i++) s += a[i],s += '#';
	len = s.size();
	s[len - 1] = '$',d[1] = 1,l = 1,r = 1,ans = 0;
	for(int i = 1;i < (int)s.size() - 1;i++){
		if(i <= r) d[i] = min(d[r - i + l],r - i + 1);
		while(i + d[i] < (int)s.size() && i - d[i] > 0 && s[i + d[i]] == s[i - d[i]] && s[i + d[i]] != '$') d[i]++;
		if(i + d[i] - 1 > r) r = i + d[i] - 1,l = i - d[i] + 1;
		if(s[i + d[i] - 1] != '#') ans = max(ans,d[i]);
		else ans = max(ans,d[i] - 1);
	}
	return ;
}
int n;
signed main(){
	scanf("%lld",&n);
	for(int i = 1;i <= n;i++){
		cin >> a;
		m();
		printf("%lld\n",ans);
	}
	return 0;
}
AC 100pts:
CPP
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<cstring>
#define int long long
using namespace std;
int len,ans = 1,n,d[40000005],l,r;
string a,s;
void m(){
	s = '$';
	for(int i = 0;i < (int)a.size();i++) s += a[i],s += '#';
	len = s.size();
	s[len - 1] = '$',d[1] = 1,l = 1,r = 1,ans = 0;
	for(int i = 2;i < (int)s.size() - 1;i++){
		d[i] = 0;
		if(i <= r) d[i] = min(d[r - i + l],r - i + 1);
		while(i + d[i] < (int)s.size() && i - d[i] > 0 && s[i + d[i]] == s[i - d[i]] && s[i + d[i]] != '$') d[i]++;
		if(i + d[i] - 1 > r) r = i + d[i] - 1,l = i - d[i] + 1;
		if(s[i + d[i] - 1] != '#') ans = max(ans,d[i]);
		else ans = max(ans,d[i] - 1);
	}
	return ;
}
signed main(){
	scanf("%lld",&n);
	for(int i = 1;i <= n;i++){
		cin >> a;
		m();
		printf("%lld\n",ans);
	}
	return 0;
}
话说改版后怎么回帖啊

回复

6 条回复,欢迎继续交流。

正在加载回复...