社区讨论
有点诡异
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 条回复,欢迎继续交流。
正在加载回复...