省選測試20

2022-02-17 18:56:05 字數 1832 閱讀 6179

光榮爆0

題目大意 :

show code

題目大意 : 每在後面添乙個字母就求一下每個子串在字尾自動機的parent樹上到跟的所有點的深度和,允許離線

show code

#include #include #define ls (rt << 1)

#define rs (rt << 1 | 1)

using namespace std;

const int n = 4e5 + 5, m = 1e9 + 7;

struct edge e[n];

int h[n], edc;

void add(int x, int y) ; h[x] = edc;

}int n, fa[n], t[n][26], len[n], lt, trc, ans, sum, a[n];

int sz[n], son[n], tp[n], dep[n], dfn[n], dfc, b[n], s[n], w[n*4], tag[n*4];

char c[n];

void dfs(int x)

}void dfs(int x, int top)

int cal(int l, int r)

int ask(int rt, int l, int r, int x, int y)

int mid = l + r >> 1, ans = 0;

if (tag[rt])

if (x <= mid) ans = ask(ls, l, mid, x, y);

if (y > mid) ans += ask(rs, mid+1, r, x, y);

if ((w[rt] = w[ls] + w[rs]) >= m) w[rt] -= m;

return ans >= m ? ans - m : ans;

}int main()

a[i] = lt;

}for (int i = 2; i <= trc; ++i) add(fa[i], i);

dfs(1); dfs(1, 1);

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

if ((s[i] += (1ll * s[i-1] + len[b[i]] - len[fa[b[i]]] + m) % m) >= m) s[i] -= m;

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

return 0;

}

題目大意 : 乙個只由0,1,2組成的序列,每次選大於 1 的數,給他減 2,兩邊的同時加 1,知道所有數都小於 2,問最後序列是什麼樣的

show code

#include #include #include using namespace std;

const int n = 2e7 + 5;

char c[n];

int n, a[n], stk[n], tp;

int main()

else tp--, a[i] -= 2, a[i+1]++;

}if (!a[i]) stk[++tp] = i;

a[i] = 1;

}while (tp) a[stk[tp--]] = 0;

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

putchar(a[i] + '0');

return 0;

}

省選測試21

設 f i 為上一次參加的比賽是第 i 場的最大愉悅值 則 f i max f i f j frac a i j 對於隨機的資料,把列舉的範圍卡到 3000 即可 容易發現,如果沒有 a j leq a i 的限制,那麼就是乙個裸的斜率優化 dp 把 f i frac frac 看做 y 把 i 看...

省選測試9

這個名次已經是倒數了 感覺整場考試不是很在狀態,正解想不到,暴力分也沒有打滿 其實前兩道題仔細推一下還是能想出來的 t1 2 sat 有一段時間沒有打了 優化建圖的方式和之前的某道題挺像的,但是當時那道題沒改 這次算是補了乙個鍋 t2 的資料範圍折半列舉也不難想,實現時注意一下細節就行了 t3 有一...

省選測試28

題目大意 給乙個排列,翻轉k次,問最終逆序對個數的期望值 然後在用兩個字首和分別優化這3種轉移就好了 show code include define mod x using namespace std const int n 505,m 1e9 7 int n,k,a n f n n s1 n n...