TJOI2018 鹼基序列

2022-05-04 23:12:05 字數 1366 閱讀 8820

[題目鏈結]

[演算法]

考慮構建字尾自動機

用fi , j表示前i個串 , 匹配到自動機上的j號節點方案數

在自動機上dp即可 ,  詳見** 

時間複雜度 : o(nk)

[**]

#includeusing

namespace

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...