(題目鏈結)
依次向字串末尾加上乙個字元,每次求不同子串個數。
如果不是字元的範圍太大,這道題就是個板子題。。所以我們把字尾自動機上的邊用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 的非空字...