ACdream原創群賽 13 I 字尾陣列

2021-06-22 10:00:59 字數 1677 閱讀 1916

對於i,a[i]即為i之後的所有a[i]的和加字尾s[0]與s[i]的最長公用字首。

求fbi時可以先打表打出前100000個,小的直接查表,大的用矩陣快速冪求。

/*

* this code is made by 2bpencil

* problem: 1116

* verdict: accepted

* submission date: 2014-06-10 10:18:07

* time: 184 ms

* memory: 12800 kb

*/#include#include#include#include#include#include#include#include#includeusing namespace std;

#define ll long long

ll mod=1e9+7;

ll fbi[10002];

void init()

struct matrix

}return ret;

}};matrix pow_m(matrix a,long long n)

return ret;

}

long long calc(long long n)

const int n = 100110;

int r[n], tx[n], ty[n], rs[n], ranks[n], sa[n], height[n], rmq[n][20]; //rs基數排序

char s[n];

bool cmp(int *r, int a, int b, int len)

void suffix(int n, int m) //n為長度,最大值小於m

for(i = 1; i < m; ++i)

rs[i] += rs[i - 1];

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

sa[--rs[x[i]]] = i;

for(j = p = 1; p < n; j <<= 1, m = p)

for(i = 0; i < m; ++i)

rs[i] = 0;

for(i = 0; i < n; ++i)

++rs[x[y[i]]];

for(i = 1; i < m; ++i)

rs[i] += rs[i - 1];

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

sa[--rs[x[y[i]]]] = y[i];

t = x, x = y, y = t;

for(i = 1, p = 1, x[sa[0]] = 0; i < n; ++i)

}/**for(i = 0; i < n; ++i)

printf("%s\n", s + sa[i]);*/}

void calheight(int n)}

void initrmq(int n)

}}int log[n];

void initlog()

//求兩個串的最長公共子串

int main()

temp+=l;

ans = (ans+calc(temp))%mod;

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

}return 0;

}

ACdream群賽 Apple (dfs 博弈論)

題目鏈結 題目大意 給你n個籃子和m個蘋果,每個籃子和蘋果都不一樣,每次操作可以加乙個籃子或加乙個蘋果,當把蘋果放進籃子的組合方法超過a時,該操作者輸 這題我首先就想到dfs 博弈論可以解的,可是當n為1的時候,兩人都無法取勝的時候為平局 這裡我之前沒想到然後就一直re 最後想到之後改了一下 就無限...

奮鬥群群賽 4

t2arpa and an exam about geometry t3five dimensional points t4polycarpus dice總結 t1位置所在 有一排觀眾席,有n個人,當t 1時第乙個人站起來,t 2時第二個人站起來,t 3時第三個人站起來 到k位置,都是站起來,但是k...

奮鬥群群賽 9

t2the queue t3garland t4cartons of milk t5change free總結 t1位置所在 就是給你n個數字,讓你建乙個塔,從n到底部而且最後再到1,輸入天數,如果可以建立塔的話,輸出這些部分,如果沒有可以建的東西,就輸出換行就好了,第i位對應第i天下下來的食物!求...