70分,但是开long long了

P3501 [POI2010] ANT-Antisymmetry

@[_Chasing_](/user/471571)
by Soul_Love @ 2023-11-22 17:16:51


@[xh001](/user/598904) @[brief_talk](/user/490712) @[Schengquanb](/user/522067)
by Soul_Love @ 2023-11-22 17:19:30


@[Most_High_Cold](/user/489634)
by Soul_Love @ 2023-11-22 17:33:45


第31行为什么要把原字符数组处理成整型数组呢
by Second_w @ 2023-11-22 17:38:53


@[Soul_Love](/user/110009) ```cpp #include<bits/stdc++.h> #define int unsigned long long using namespace std; char g1[500010],g2[500010]; int n,jc[500010],h1[500010],p=131,l,r,s,h2[500010],ans; inline int read() { int k=0,f=0;char c=getchar(); for(;!isdigit(c);c=getchar()) f|=c=='-'; for(;isdigit(c);c=getchar()) k=(k<<1)+(k<<3)+(c^48); return f?-k:k; } inline int get1(int l,int r) { return h1[r]-h1[l-1]*jc[r-l+1]; } inline int get2(int l,int r) { return h2[r]-h2[l-1]*jc[r-l+1]; } inline int check(int len,int k) { if(k-len+1<=0||k+len>n) return 0; if(get1(k-len+1,k)==get2(n-k-len+1,n-k)) return 1; return 0; } signed main() { n=read(); scanf("%s",g1+1); for(int i=1;i<=n;i++) g2[i]=g1[n-i+1]=='0'?'1':'0'; jc[0]=1; for(int i=1;i<=n;i++) { jc[i]=jc[i-1]*p; h1[i]=h1[i-1]*p+g1[i]; h2[i]=h2[i-1]*p+g2[i]; } for(int i=1;i<=n;i++) { l=1,r=n,ans=0; while(l<=r) { int m=(l+r)>>1; if(check(m,i)) { ans=m; l=m+1; } else r=m-1; } s+=ans; } std::cout<<s; return 0; } ```
by Second_w @ 2023-11-22 17:40:22


@[caizilang](/user/510908) 诶,A掉了耶,谢谢
by Soul_Love @ 2023-11-22 17:42:46


|