为啥tle了
查看原帖
为啥tle了
1122530
elpsconr楼主2024/10/31 12:35

我跟这篇题解一模一样,结果他过了我超时了为啥

/*
   卫风·芄兰
芄兰之支,童子佩觿.
虽则佩觿,能不我知?
容兮遂兮,垂带悸兮.
芄兰之叶,童子佩韘.
虽则佩韘,能不我甲?
容兮遂兮,垂带悸兮.
*/
#include<bits/stdc++.h>
using namespace std;
//#define int long long
#define PII pair<int,int>
#define tul tuple<int,int,int>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define rep_(i,a,b) for(int i=a;i>=b;--i)
#define all(x) x.begin(),x.end()
#define bp(x) __builtin_popcountll(x)
#define ctz(x) __builtin_ctz(x)
#define cy cout<<"Yes"<<endl
#define cn cout<<"No"<<endl
#define lc (rt<<1)
#define rc (rt<<1|1)
mt19937_64 rnd(time(0));
const int N=3e7+5,yyx=1e9+7;
//vector<PII> to[N];
int n,m,a[N];
char s[N],str[N];
inline int mod(int x){
  return (x%yyx+yyx)%yyx;
}
inline int cmin(int &x,int y){
  return x>y?x=y,1:0;
}
inline int cmax(int &x,int y){
  return x<y?x=y,1:0;
}
int manacher(char s[]){
   n=strlen(s);
   str[0]=str[1]='#';
   rep(i,0,n-1) str[i*2+2]=s[i],str[i*2+3]='#';
   n=n*2+2;str[n]=0;
   int j=0,m;
   for(int i=n;str[i];i++) str[i]=0;
   rep(i,1,n-1){
    if(j>i) a[i]=min(a[j],a[m]+m-i);
    else a[i]=1;
    for (;str[i+a[i]]==str[i-a[i]];++a[i]);
    if(cmax(j,a[i]+i)) m=i;
   }
   int ans=0;
   rep(i,0,n-1) ans=max(ans,a[i]-1);
   return ans;
}
inline void solve(){
  cin>>s;
  cout<<manacher(s)<<endl;
}
signed main(){
  cin.tie(0)->sync_with_stdio(0);
  //freopen("D://321//in.txt","r",stdin);
  //freopen("D://321//out.txt","w",stdout);
  int _=1;
  //cin>>_;
  while(_--)
  solve();
  return 0;
}
2024/10/31 12:35
加载中...