省選測試28

2022-02-17 18:56:03 字數 1924 閱讀 2436

題目大意 : 給乙個排列,翻轉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], s2[n][n], s3[n][n], s4[n][n], s5[n][n], s6[n][n], ans, p = 1;

int pow(int a, int k, int ans = 1)

int cal(int x)

int main()

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

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

f[i][j] = (f[i][j] * (1ll * cal(i-1) + cal(j-i-1) + cal(n-j)) + s2[i][n] + s2[i][i-1] - s2[i][n+i-j] + m - s2[i][j-1] + m + s4[j-1][j] - s4[j-i-1][j] + m - s4[i-1][j] + m + s6[n][n+i-j] - s6[n-i][n-j] + m - s6[j-1][i-1] + m) % m;

p = 1ll * p * cal(n) % m;

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

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

f[i][j] = mod(p - f[j][i] + m);

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

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

if ((ans += f[i][j]) >= m) ans -= m;

printf("%lld\n", 1ll * ans * pow(p, m - 2) % m);

return 0;

}

題目大意 : 定義乙個長度為k的序列b的權值是 \(\sum_^i\times b_i\),給乙個長度為n的序列問長度分別為1到n的子串行最大權值

show code

#include #define get(x) (t[fa[x]][1] == x)

using namespace std;

const int n = 1e5 + 5;

int read(int x = 0, int f = 1, char c = getchar())

int n, t[n][2], fa[n], sz[n], rt, stk[n], tp;

long long tag[n], w[n], ans;

void pushup(int x)

void rotate(int x)

void uptate(int x, long long val)

void pushdown(int x)

void splay(int x, int to = 0)

if (!to) rt = x;

}void dfs(int x)

int main()

t[lt][k] = i; fa[i] = lt; w[i] = 1ll * val * sum;

splay(i); uptate(t[i][1], val);

}dfs(rt);

return 0;

}

題目大意 :

show code

考試 省選28

t1炸了 別的沒啥。t1 k n 我就會死,窩階乘只處理到了 n 其實挺簡單的乙個題。就是要求關於某一段路徑,其兩端分別連線 k 條不相交路徑的方案。考慮乙個點,他的兒子稱為 ch i 那麼方案數的生成函式就是 f x prod limits sz ch i x 1 這個可以直接分治 ntt 來計算...

省選測試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 有一...