{"id":241,"date":"2010-05-07T19:03:00","date_gmt":"2010-05-07T11:03:00","guid":{"rendered":"http:\/\/localhost\/?p=241"},"modified":"2010-05-07T19:03:00","modified_gmt":"2010-05-07T11:03:00","slug":"spoj_new_distinct_substrings","status":"publish","type":"post","link":"https:\/\/www.shuizilong.com\/wjmzbmr\/?p=241","title":{"rendered":"SPOJ New Distinct Substrings"},"content":{"rendered":"<p> https:\/\/www.spoj.pl\/problems\/SUBST1\/<br \/>\u8fd9\u662f\u7ecf\u5178\u7684\u9898\u76ee\u4e86\u3002\u3002\u6c42\u51fa\u540e\u7f00\u6570\u7ec4\u548cHeight\u6570\u7ec4\uff0c\u7136\u540e\u7528n*(n+1)\/2-\u6240\u6709Height\u7684\u548c\u5c31OK\u4e86\u56e7\u3002\u3002\u3002<br \/>Code\uff1a<br \/>#include &lt;vector&gt;<br \/>#include &lt;algorithm&gt;<br \/>#include &lt;utility&gt;<br \/>#include &lt;iostream&gt;<br \/>#include &lt;cstdio&gt;<br \/>#include &lt;cmath&gt;<br \/>#include &lt;cstdlib&gt;<br \/>#include &lt;cstring&gt;<br \/>#define rep(i,n) for(int i=0;i&lt;n;i++)<br \/>#define pb push_back<br \/>const int inf=~0U&gt;&gt;1,maxn=50000+10;<br \/>using namespace std;<br \/>char C[maxn];int ta[maxn],tb[maxn],sa[maxn],n,m,*x=ta,*y=tb,h[maxn];<br \/>void Sort()<br \/>{<br \/>    static int w[maxn];<br \/>    rep(i,m)w[i]=0;rep(i,n)w[x[y[i]]]++;rep(i,m-1)w[i+1]+=w[i];<br \/>    for(int i=n-1;i&gt;=0;i&#8211;)sa[&#8211;w[x[y[i]]]]=y[i];<br \/>}<br \/>bool cmp(int a,int b,int l)<br \/>{return y[a]==y[b]&amp;&amp;y[a+l]==y[b+l];}<br \/>void Da()<br \/>{<br \/>    rep(i,n)x[i]=C[i],y[i]=i;Sort();int i,j,p;<br \/>    for(j=1,p=1;p&lt;n;j*=2,m=p)<br \/>    {<br \/>        for(p=0,i=n-j;i&lt;n;i++)y[p++]=i;<br \/>        rep(i,n)if(sa[i]&gt;=j)y[p++]=sa[i]-j;Sort();<br \/>        for(swap(x,y),p=1,x[sa[0]]=0,i=1;i&lt;n;i++)<br \/>            x[sa[i]]=cmp(sa[i-1],sa[i],j)?p-1:p++;<br \/>    }<br \/>}<br \/>void CalH()<br \/>{<br \/>    static int R[maxn];<br \/>    int i,j,k=0;<br \/>    for(i=1;i&lt;=n;i++)R[sa[i]]=i;<br \/>    for(i=0;i&lt;n;h[R[i++]]=k)<br \/>        for(k?k&#8211;:0,j=sa[R[i]-1];C[i+k]==C[j+k];k++);<br \/>}<br \/>void Solve()<br \/>{<br \/>    scanf(&quot;%s&quot;,C);n=strlen(C);C[n++]=0;m=256;<br \/>    Da();n&#8211;;long long ans=n;ans*=n+1;ans\/=2;<br \/>    CalH();rep(i,n)ans-=h[i+1];cout&lt;&lt;ans&lt;&lt;endl;<br \/>}<br \/>int main()<br \/>{<br \/>    \/\/freopen(&quot;in&quot;,&quot;r&quot;,stdin);<br \/>    int t;cin&gt;&gt;t;while(t&#8211;)Solve();<br \/>} <\/p>\n","protected":false},"excerpt":{"rendered":"<p>https:\/\/www.spoj.pl\/problems\/SUBST1\/\u8fd9\u662f\u7ecf\u5178\u7684\u9898\u76ee\u4e86\u3002\u3002\u6c42\u51fa\u540e\u7f00\u6570\u7ec4\u548cHeight\u6570\u7ec4\uff0c\u7136\u540e\u7528n*(n+1)\/2-\u6240\u6709Height\u7684\u548c\u5c31OK\u4e86\u56e7\u3002\u3002\u3002Code\uff1a#include &lt;vector&gt;#include &lt;algorithm&gt;#include &lt;utility&gt;#include &lt;iostream&gt;#include &lt;cstdio&gt;#include &lt;cmath&gt;#include &lt;cstdlib&gt;#include &lt;cstring&gt;#define rep(i,n) for(int i=0;i&lt;n;i++)#define pb push_backconst int inf=~0U&gt;&gt;1,maxn=50000+10;using namespace std;char C[maxn];int ta[maxn],tb[maxn],sa[maxn],n,m,*x=ta,*y=tb,h[maxn];void Sort(){ static int w[maxn]; rep(i,m)w[i]=0;rep(i,n)w[x[y[i]]]++;rep(i,m-1)w[i+1]+=w[i]; for(int i=n-1;i&gt;=0;i&#8211;)sa[&#8211;w[x[y[i]]]]=y[i];}bool cmp(int a,int b,int l){return y[a]==y[b]&amp;&amp;y[a+l]==y[b+l];}void Da(){ rep(i,n)x[i]=C[i],y[i]=i;Sort();int i,j,p; for(j=1,p=1;p&lt;n;j*=2,m=p) { for(p=0,i=n-j;i&lt;n;i++)y[p++]=i; rep(i,n)if(sa[i]&gt;=j)y[p++]=sa[i]-j;Sort(); for(swap(x,y),p=1,x[sa[0]]=0,i=1;i&lt;n;i++) x[sa[i]]=cmp(sa[i-1],sa[i],j)?p-1:p++; }}void CalH(){ static int R[maxn]; int i,j,k=0; for(i=1;i&lt;=n;i++)R[sa[i]]=i; for(i=0;i&lt;n;h[R[i++]]=k) for(k?k&#8211;:0,j=sa[R[i]-1];C[i+k]==C[j+k];k++);}void Solve(){ scanf(&quot;%s&quot;,C);n=strlen(C);C[n++]=0;m=256; Da();n&#8211;;long long [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[10],"tags":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts\/241"}],"collection":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=241"}],"version-history":[{"count":0,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts\/241\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=241"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=241"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=241"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}