日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CF17E:Palisection——题解

發布時間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CF17E:Palisection——题解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://vjudge.net/problem/CodeForces-17E

http://codeforces.com/problemset/problem/17/E

題目大意:給一個長度為n的字符串,求不相交的回文串對數。

————————————————————————————

點擊這里看大佬的題解。

#include<cstdio> #include<cstring> #include<algorithm> #define N 2000010 #define MOD 51123987 using namespace std; typedef long long ll; ll mx,id,p[2*N],f[2*N],g[2*N]; //g[i]以i為終點的回文串個數 //f[i]以i為起點的回文串個數 char s[2*N]; int main(){int l;scanf("%d%s",&l,s+1);s[0]='@';ll sum=0;for(int i=l;i>=1;i--)s[i*2]=s[i];for(int i=1;i<=2*l+1;i+=2)s[i]='#';s[2*l+2]='?';l=2*l+1;for(int i=1;i<=l;i++){if(mx>i)p[i]=min(p[2*id-i],mx-i);else p[i]=1;while(s[i-p[i]]==s[i+p[i]])p[i]++;if(i+p[i]>mx){mx=i+p[i];id=i;}sum+=(p[i]-1)>>1;if(i%2==0)sum++;sum%=MOD;}sum=sum*(sum-1)/2;for(int i=2;i<=l;i+=2){f[i-p[i]+2]++;f[i+2]--;g[i]++;g[i+p[i]]--;}for(int i=1;i<=l;i+=2){f[i-p[i]+2]++;f[i+1]--;g[i+1]++;g[i+p[i]]--;}for(int i=2;i<=l;i+=2){f[i]+=f[i-2];f[i]%=MOD;g[i]+=g[i-2];g[i]%=MOD;}f[l+1]=0;for(int i=l-1;i>=1;i-=2){f[i]+=f[i+2];f[i]%=MOD;}for(int i=2;i<=l;i+=2){sum-=g[i]*f[i+2]%MOD;sum=(sum+MOD)%MOD;}printf("%lld\n",(sum%MOD+MOD)%MOD);return 0; }

?

轉載于:https://www.cnblogs.com/luyouqi233/p/7978622.html

總結

以上是生活随笔為你收集整理的CF17E:Palisection——题解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。