[題目鏈結]
[演算法]
考慮構建字尾自動機
用fi , j表示前i個串 , 匹配到自動機上的j號節點方案數
在自動機上dp即可 , 詳見**
時間複雜度 : o(nk)
[**]
#includeusingnamespace
std;
typedef
long
long
ll;typedef
long
double
ld;typedef unsigned
long
long
ull;
const
int n = 20010
;const
int alpha = 26
;const
int p = 1e9 + 7
;#define rint register int
intk;
char
s[n];
template
inline void chkmax(t &x,t y)
template
inline void chkmin(t &x,t y)
template
inline void read(t &x)
struct
suffix_automaton
inline
int new_node(int
dep)
inline
void extend(int
ch)
}last =np;
size[np] = 1
; }
inline
void insert(char *s)
inline
void dfs(int u , int
par)}}
inline
void update(int &x , int
y)
inline
int find(int now , char *s)
inline
void
calc()}}
int ans = 0
;
for (rint i = 1; i <= sz; ++i)
update(ans , 1ll * size[i] * dp[k & 1][i] %p);
printf(
"%d\n
", ans);
}} sam;
intmain()
TJOI2018 最長上公升子串行
觀察題目 在第 i 輪操作時,將數字 i 插入 插入的數字是當前最大的 如果答案與上次不同,新的lis必以 i 結尾 以 i 結尾的lis無法再伸長 因為比 i 小的都插入完了 也就是說,加入 i 1 到 n 的數,不會對以 i 結尾的上公升子串行有影響,所以我們不用去動態地維護lis的大小,只需要...
TJOI2018 數學計算
如果採取暴力的做法,那麼乘起來會炸longlong,除非寫個高精。再考慮乘一下逆元呢,顯然也不行,模數不一定為質數。這道題的關鍵點在於這句話,對於每乙個型別1的操作至多會被除一次 這句話的最基本的告訴了我們每次得到的答案一定是乙個整數 其次,這句話保證了可以應用線段樹解決這個問題 如果除的操作可能會...
Tjoi2018 數學計算
bzoj luogu 線段樹分治 是不是想問為什麼不暴力做?模數沒說是質數,所以不一定有逆元.然後就是要每次build一下把線段樹權值init成1,博豬不知道為什麼for就wa,build就過了 用re自動機查了下,發現還是有0.for int i 1 i 1 i s i 1 define ls x...