70分

P3501 [POI2010] ANT-Antisymmetry

~~何不用PAM~~
by duyi @ 2019-08-12 16:11:07


我也是70qwq 可能是一样的问题 ``` #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<vector> #define f(a,b,c) for(register int a=(b);a<=(c);a++) #define ff(a,b,c) for(register int a=(b);a>=(c);a--) #define inf 9223372036854775807 #define wer rd() #define pc putchar('\n') #define ps putchar(' ') #define ll long long using namespace std; inline ll rd() { ll ans;char t,k; while(((t=getchar())!='-')&&(t>'9'||t<'0')); k=(t=='-'); ans=k?0:(t-'0'); while((t=getchar())>='0'&&t<='9')ans=ans*10+t-'0'; return k?-ans:ans; } inline void wt(ll k) { if(k<0)putchar('-'),wt(-k); else{ if(k<10)putchar('0'+k); else wt(k/10),putchar('0'+k%10); } return; } inline ll min(ll a,ll b) { return a>b?b:a; } inline ll max(ll a,ll b) { return a<b?b:a; } char t[5000100],s[5000500]; int n,r[1000500]; int main() { cin>>n; cin>>(t+1); s[0]='@'; f(i,1,n) { s[i*2-1]='#'; s[i*2]=t[i]; } s[n*2+1]='#'; s[n*2+2]='$'; int maxlen,p,ans;maxlen=p=ans=0; for(register int i=1;i<=n*2+1;i+=2) { if(i<maxlen)r[i]=min(maxlen-i,r[p*2-i]); else r[i]=1; while((s[i+r[i]]-'0'+s[i-r[i]]-'0'==1)||(s[i+r[i]]==s[i-r[i]]&&s[i-r[i]]=='#'))r[i]++; if(i+r[i]>maxlen) { p=i; maxlen=i+r[i]; } ans+=r[i]/2; } wt(ans); } ``` 望大佬相助qwq
by Nerovix @ 2019-08-12 23:50:35



by Nerovix @ 2019-08-12 23:50:48


@[_OiNksEduCn_](/space/show?uid=164437) 您好,算法没有问题,ans 没开 long long 。 记录请见:[####](https://www.luogu.org/record/24365827)
by jyi2ya @ 2019-09-26 16:46:00


@[HNFMS_HeJiayi](/user/87267) 感谢,我也70变100了(/≧▽≦/)
by 可爱的Flandre酱 @ 2020-08-12 15:02:50


|