{"id":2739,"date":"2023-05-05T00:34:52","date_gmt":"2023-05-04T16:34:52","guid":{"rendered":"https:\/\/www.shuizilong.com\/house\/?p=2739"},"modified":"2023-05-05T00:34:52","modified_gmt":"2023-05-04T16:34:52","slug":"liberoj-3723-%e3%80%8csdoi-sxoi2022%e3%80%8d%e5%ad%90%e4%b8%b2%e7%bb%9f%e8%ae%a1","status":"publish","type":"post","link":"https:\/\/www.shuizilong.com\/house\/archives\/liberoj-3723-%e3%80%8csdoi-sxoi2022%e3%80%8d%e5%ad%90%e4%b8%b2%e7%bb%9f%e8%ae%a1\/","title":{"rendered":"LiberOJ #3723. \u300cSDOI \/ SXOI2022\u300d\u5b50\u4e32\u7edf\u8ba1"},"content":{"rendered":"<ul>\n<li><a href=\"https:\/\/loj.ac\/p\/3723\">https:\/\/loj.ac\/p\/3723<\/a><\/li>\n<li><a href=\"https:\/\/www.cnblogs.com\/zkyJuruo\/p\/16403110.html\">https:\/\/www.cnblogs.com\/zkyJuruo\/p\/16403110.html<\/a><\/li>\n<\/ul>\n<h1>\u9898\u610f<\/h1>\n<p>\u5f88\u795e\u5947\u7684\u9898\u3002\u3002\u3002\u8003\u8651\u66b4\u529b dp\u3002\u3002\u4e0d\u96be\u6709\u3002\u3002<\/p>\n<pre class=\"brush: cpp; light: false; title: ; toolbar: true; notranslate\" title=\"\">\r\n    FOR(i, 1, n) {\r\n        REP(l, n-i) {\r\n            int r = l + i;\r\n            dp&#x5B;l]&#x5B;r] = (dp&#x5B;l+1]&#x5B;r] + dp&#x5B;l]&#x5B;r-1]) * occ&#x5B;l]&#x5B;r];\r\n        }\r\n    }\r\n<\/pre>\n<p>\u53ea\u8981\u7528\u540e\u7f00\u6570\u7ec4\u9884\u5904\u7406\u51fa occ \u5373\u53ef\uff0c\u590d\u6742\u5ea6 O(n2)\u3002<\/p>\n<pre class=\"brush: cpp; light: false; title: ; toolbar: true; notranslate\" title=\"\">\r\n#include &lt;lastweapon\/bitwise&gt;\r\n#include &lt;lastweapon\/number&gt;\r\nusing namespace lastweapon;\r\nconst int N = int(5e3) + 9;\r\n\r\nint C&#x5B;N], key&#x5B;N], t1&#x5B;N], t2&#x5B;N];\r\nint n;\r\n\r\nnamespace SA {\r\n    const int Z = 27;\r\n    int a&#x5B;3*N], sa&#x5B;3*N], rk&#x5B;N], h&#x5B;N];\r\n\r\n    inline void rs(int*x,int*y,int*sa,int n,int m){\r\n        REP(i, n)key&#x5B;i]=i&#x5B;y]&#x5B;x];\r\n        memset(C, 0,sizeof(C&#x5B;0])*m);\r\n        REP(i, n) ++C&#x5B;key&#x5B;i]];\r\n        FOR(i, 1, m) C&#x5B;i] += C&#x5B;i-1];\r\n        DWN(i, n, 0) sa&#x5B;--C&#x5B;key&#x5B;i]]] = y&#x5B;i];\r\n    }\r\n\r\n    void da(int*a,int*sa,int n,int m){\r\n        int *x = t1, *y = t2;\r\n        memset(C,0,sizeof(C&#x5B;0])*m);\r\n        REP(i, n)++C&#x5B;x&#x5B;i]=a&#x5B;i]];\r\n        FOR(i, 1, m)C&#x5B;i]+=C&#x5B;i-1];\r\n        DWN(i, n, 0)sa&#x5B;--C&#x5B;x&#x5B;i]]]=i;\r\n        for(int l=1,p=1;p&lt;n;l&lt;&lt;=1,m=p){\r\n            p=0; FOR(i, n-l, n) y&#x5B;p++]=i;\r\n            REP(i, n) if (sa&#x5B;i]&gt;=l) y&#x5B;p++]=sa&#x5B;i]-l;\r\n            rs(x,y,sa,n,m),swap(x,y),x&#x5B;sa&#x5B;0]]=p=0;FOR(i, 1, n)\r\n                x&#x5B;sa&#x5B;i]]=(y&#x5B;sa&#x5B;i]]==y&#x5B;sa&#x5B;i-1]]&amp;&amp;y&#x5B;sa&#x5B;i]+l]==y&#x5B;sa&#x5B;i-1]+l])?p:++p;\r\n            ++p;\r\n        }\r\n    }\r\n\r\n#define F(x) ((x)\/3+((x)%3==1?0:tb))\r\n#define G(x) ((x)&lt;tb?(x)*3+1:((x)-tb)*3+2)\r\nint c0(int*r,int a,int b)\r\n{return r&#x5B;a]==r&#x5B;b]&amp;&amp;r&#x5B;a+1]==r&#x5B;b+1]&amp;&amp;r&#x5B;a+2]==r&#x5B;b+2];}\r\nint c12(int k,int*r,int a,int b)\r\n{if(k==2) return r&#x5B;a]&lt;r&#x5B;b]||r&#x5B;a]==r&#x5B;b]&amp;&amp;c12(1,r,a+1,b+1);\r\n else return r&#x5B;a]&lt;r&#x5B;b]||r&#x5B;a]==r&#x5B;b]&amp;&amp;key&#x5B;a+1]&lt;key&#x5B;b+1];}\r\n\r\nvoid dc3(int*a,int*sa,int n,int m){\r\n    int i, j, *an=a+n, *san=sa+n, ta=0, tb=(n+1)\/3, tbc=0, p;\r\n    a&#x5B;n] = a&#x5B;n+1] = 0; REP(i, n) if (i%3) t1&#x5B;tbc++]=i;\r\n\r\n    rs(a+2,t1,t2,tbc,m),rs(a+1,t2,t1,tbc,m),rs(a,t1,t2,tbc,m);\r\n    p=0,an&#x5B;F(t2&#x5B;0])]=0;FOR(i, 1, tbc)\r\n        an&#x5B;F(t2&#x5B;i])]=c0(a,t2&#x5B;i-1],t2&#x5B;i])?p:++p;\r\n\r\n    if (++p &lt; tbc) dc3(an,san,tbc,p);\r\n    else REP(i, tbc) san&#x5B;an&#x5B;i]] = i;\r\n\r\n    REP(i, tbc) if(san&#x5B;i] &lt; tb) t2&#x5B;ta++] = san&#x5B;i] * 3;\r\n    if (n%3==1) t2&#x5B;ta++] = n-1; rs(a,t2,t1,ta,m);\r\n    REP(i, tbc) key&#x5B;t2&#x5B;i]=G(san&#x5B;i])] = i;\r\n\r\n    for(i=0,j=0,p=0; i&lt;ta &amp;&amp; j&lt;tbc; p++)\r\n        sa&#x5B;p]=c12(t2&#x5B;j]%3,a,t1&#x5B;i],t2&#x5B;j]) ? t1&#x5B;i++] : t2&#x5B;j++];\r\n    for(;i&lt;ta;p++) sa&#x5B;p]=t1&#x5B;i++]; for(;j&lt;tbc;p++) sa&#x5B;p]=t2&#x5B;j++];\r\n}\r\n\r\nvoid get_h(){\r\n    REP_1(i, n) rk&#x5B;sa&#x5B;i]] = i;\r\n    int k=0;for(int i=0;i&lt;n;h&#x5B;rk&#x5B;i++]]=k){\r\n        if (k)--k;for(int j=sa&#x5B;rk&#x5B;i]-1];a&#x5B;i+k]==a&#x5B;j+k];++k);\r\n    }\r\n}\r\n\r\nvoid bd(){\r\n    dc3(a,sa,n+1,Z),get_h();\r\n}\r\n\r\n} using namespace SA;\r\n\r\nchar s&#x5B;N]; Int dp&#x5B;N]&#x5B;N]; int occ&#x5B;N]&#x5B;N];\r\n\r\nint main() {\r\n#ifndef ONLINE_JUDGE\r\n    freopen(&quot;in.txt&quot;, &quot;r&quot;, stdin);\r\n#endif\r\n\r\n    MOD = 998244353;\r\n\r\n    n = strlen(RS(s)); REP(i, n) a&#x5B;i] = s&#x5B;i] - 'a' + 1; bd();\r\n\r\n    REP(i, n) {\r\n        int l = rk&#x5B;i], r = l+1;\r\n        DWN(j, n, i) {\r\n            int len = j-i+1;\r\n            while (h&#x5B;l] &gt;= len) --l;\r\n            while (h&#x5B;r] &gt;= len) ++r;\r\n            occ&#x5B;i]&#x5B;j] = r-l;\r\n        }\r\n    }\r\n\r\n    REP(i, n) dp&#x5B;i]&#x5B;i] = occ&#x5B;i]&#x5B;i];\r\n\r\n    FOR(i, 1, n) {\r\n        REP(l, n-i) {\r\n            int r = l + i;\r\n            dp&#x5B;l]&#x5B;r] = (dp&#x5B;l+1]&#x5B;r] + dp&#x5B;l]&#x5B;r-1]) * occ&#x5B;l]&#x5B;r];\r\n        }\r\n    }\r\n\r\n    cout &lt;&lt; dp&#x5B;0]&#x5B;n-1] &lt;&lt; endl;\r\n\r\n    \/\/Display(occ, n, n);\r\n    \/\/Display(dp, n, n);\r\n}\r\n<\/pre>\n<p>\u8fdb\u4e00\u6b65\u6211\u4eec\u89c2\u5bdf occ \u6570\u7ec4\u3002\u53d1\u73b0\u5b83\u5f88\u6709\u89c4\u5f8b\uff0c\u4e8e\u662f\u53ef\u4ee5\u4f7f\u7528\u5206\u6cbb FFT\u3002\u3002\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>https:\/\/loj.ac\/p\/3723 https:\/\/www.cnblogs.com\/zkyJuruo\/p\/16403110.html \u9898\u610f \u5f88\u795e\u5947\u7684\u9898\u3002\u3002\u3002\u8003\u8651\u66b4\u529b dp\u3002\u3002\u4e0d\u96be\u6709\u3002\u3002 FOR(i, 1, n) { REP(l, n-i) { int r = l + i; dp&#x5B;l]&#x5B;r] = (dp&#x5B;l+1]&#x5B;r] + dp&#x5B;l]&#x5B;r-1]) * occ&#x5B;l]&#x5B;r]; } } \u53ea\u8981\u7528\u540e\u7f00\u6570\u7ec4\u9884\u5904\u7406\u51fa occ \u5373\u53ef\uff0c\u590d\u6742\u5ea6 O(n2)\u3002 #include &lt;lastweapon\/bitwise&gt; #include &lt;lastweapon\/number&gt; using namespace lastweapon; const int N = int(5e3) + 9; int C&#x5B;N], key&#x5B;N], t1&#x5B;N], t2&#x5B;N]; int n; namespace SA { [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[1],"tags":[],"class_list":["post-2739","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p2tdP7-Ib","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts\/2739","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/comments?post=2739"}],"version-history":[{"count":1,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts\/2739\/revisions"}],"predecessor-version":[{"id":2740,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts\/2739\/revisions\/2740"}],"wp:attachment":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/media?parent=2739"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/categories?post=2739"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/tags?post=2739"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}