TLE求助!!92分

P7114 [NOIP2020] 字符串匹配

``` #include<cstdio> #include<cstring> using namespace std; const int maxn=1200000; const unsigned MLY=133; template<class T>inline T Max(const T &a,const T &b){return a>b?a:b;} char s[maxn]; int n; struct TreeArray{ int tr[28]; #define lowbit(x) (x&-x) inline void add(int x,int d){ ++x;while(x<=27)tr[x]+=d,x+=lowbit(x); } inline int ask(int x){ ++x; int ans=0; while(x)ans+=tr[x],x-=lowbit(x); return ans; } inline void clear(){ memset(tr,0,sizeof(tr)); } }BIT; struct StringHash{ unsigned long long hash[maxn],base[maxn]; inline StringHash(){ base[0]=1;for(int i=1;i<maxn;++i)base[i]=base[i-1]*MLY; } inline void Init(){ for(int i=1;i<=n;++i)hash[i]=hash[i-1]*MLY+s[i]; } inline unsigned long long ask(int l,int r){ return hash[r]-hash[l-1]*base[r-l+1]; } }Hash; int pre[maxn],suf[maxn],cnt[300],rep[maxn]; bool vis[27]; int stk[27],top; int main(){ FILE *fin=stdin; FILE *fout=stdout; int T; fscanf(fin,"%d",&T); while(T--){ memset(pre,0,sizeof(pre)); memset(suf,0,sizeof(suf)); fscanf(fin,"%s",s+1); n=strlen(s+1); Hash.Init();BIT.clear(); memset(cnt,0,sizeof(cnt)); for(int i=1;i<=n;++i)pre[i]=pre[i-1]+(((++cnt[s[i]])&1)?1:-1); memset(cnt,0,sizeof(cnt)); for(int i=n;i;--i)suf[i]=suf[i+1]+(((++cnt[s[i]])&1)?1:-1); long long ans=0; for(int i=n-1;i;--i){ if(i*2>=n)rep[i]=1; else if(Hash.ask(1,i)!=Hash.ask(i+1,i*2))rep[i]=1; else{ rep[i]=rep[i*2]*2; if(i*(rep[i]+1)<n&&Hash.ask(1,i)==Hash.ask(i*rep[i]+1,i*(rep[i]+1)))++rep[i]; } } for(int i=1;i<n;++i){ if(rep[i]==1){ ans+=BIT.ask(suf[i+1]); } else{ ans+=(rep[i]+1)/2ll*BIT.ask(suf[i+1]); ans+=rep[i]/2ll*BIT.ask(suf[i*2+1]); } BIT.add(pre[i],1); } fprintf(fout,"%lld\n",ans); } return 0; } ```
by Gary_NotFound @ 2023-10-02 08:25:50


我想问的是我这个代码为什么会TLE. 怎么该才能通过??
by lij123 @ 2023-10-02 08:43:53


@[Gary_NotFound](/user/654056)
by lij123 @ 2023-10-02 08:44:11


试试快读快输?
by Gary_NotFound @ 2023-10-02 08:46:59


不行 @[Gary_NotFound](/user/654056)
by lij123 @ 2023-10-04 11:49:55


@[lij123](/user/1037981) 函数加inline,我也这样
by kbzcz @ 2023-10-18 08:43:20


@[kbzcz](/user/416192) 谢谢
by lij123 @ 2023-10-18 21:24:32


|