bzoj4516 Sdoi2016 生成魔咒

2022-05-21 13:33:10 字數 1451 閱讀 7490

(題目鏈結)

依次向字串末尾加上乙個字元,每次求不同子串個數。

如果不是字元的範圍太大,這道題就是個板子題。。所以我們把字尾自動機上的邊用map存下就好了。

倫說hash可以做,但是這hash掛鏈不是很慢嗎。。 、

原來可以鄰接表,我是sb。。。

sam陣列開兩倍。

// bzoj4516

#include#include#include#include#include#include#include#define ll long long

#define inf 2147483640

#define pi acos(-1.0)

#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);

using namespace std;

const int maxn=100010;

int n,dargen,last,sz;

int par[maxn<<1],len[maxn<<1];

ll ans;

mapch[maxn<<1];

void extend(int c)

} ans+=len[np]-len[par[np]];

printf("%lld\n",ans);

}int main()

return 0;

}

字尾陣列+雙向鍊錶。左轉題解:

// bzoj4516

#include#include#include#include#include#include#include#define ll long long

#define inf 2147483640

#define pi acos(-1.0)

#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);

using namespace std;

const int maxn=100010;

int sa[maxn],rank[maxn],height[maxn];

int s[maxn],t[maxn],nxt[maxn],pre[maxn],ans[maxn];

int n;

namespace suffix

void da(int *r,int *sa,int n,int m)

} void calheight(int *r,int *sa,int n) }}

using namespace suffix;

int main()

for (int i=1;i<=n;i++)

ll res=0;

for (int i=n;i>=1;i--)

return 0;

}

bzoj4516 SDOI2016 生成魔咒

time limit 10 sec memory limit 128 mb submit 376 solved 232 submit status discuss 魔咒串由許多魔咒字元組成,魔咒字元可以用數字表示。例如可以將魔咒字元 1 2 拼湊起來形成乙個魔咒串 1,2 乙個魔咒串 s 的非空字串...

bzoj4516 Sdoi2016 生成魔咒

4516 sdoi2016 生成魔咒 time limit 10 sec memory limit 128 mb submit 575 solved 327 submit status discuss 魔咒串由許多魔咒字元組成,魔咒字元可以用數字表示。例如可以將魔咒字元 1 2 拼湊起來形成乙個魔咒...

bzoj 4516 Sdoi2016 生成魔咒

time limit 10 sec memory limit 128 mb submit 1026 solved 576 submit status discuss 魔咒串由許多魔咒字元組成,魔咒字元可以用數字表示。例如可以將魔咒字元 1 2 拼湊起來形成乙個魔咒串 1,2 乙個魔咒串 s 的非空字...