省選模擬測試22

2022-08-20 05:12:17 字數 3374 閱讀 7860

期望得分:\(60+100+0 +30 = 160\)

實際得分:\(0+100+0+30=130\)

\(t1\) 打了個區間dp的部分分,但陣列開的 \(5000*5000\) 炸空間了。正解好像又被暴力碾過去了。

\(t2\) 考試的時候口胡了個點分樹的做法,拍了 \(1000\) 多組資料就過了。

\(t3\) 題面太複雜了,沒時間看了。

\(t4\) 推出來了和題解一樣的柿子,但只會 \(o(n^2)\) 的暴力展開的做法,想了半天沒想出來怎麼 \(o(nlogn)\) 算。

有乙個機器可以從乙個空串開始,每次進行一下兩種操作:

現在給你乙個字串(只包含 \(atcg\) ),問你最少讓機械人操作多少次可以得到這個字串。

資料範圍:\(t\leq 10,|s|\leq 100000\)

manacher暴力/回文自動機。

正解好像是回文自動機,但我不太會。

這裡就提供乙個暴力的做法(好像也能過)。

就是列舉整個字串中的所有回文串,然後遞迴求解即可。

可以先用 \(manacher\) 先預處理出所有的回文半徑,加個剪枝就可以莽過去了。

不知道問什麼,同機房大佬的**跑 \(1s\) 就過了,而我的要開 \(5s+\) 才能過。

#include#include#include#includeusing namespace std;

const int n = 5e5+10;

int t,n,cnt,zx,ans,r[n],r[n];

char s[n],a[n];

void manacher() }}

int slove(int l,int r)

return res;

}int main()

manacher();

for(int i = 1; i <= 2*n+1; i += 2) r[(i-1)/2] = (r[i]-1)/2;

printf("%d\n",slove(1,n));

}fclose(stdin); fclose(stdout);

return 0;

}

給你一棵 \(n\) 個節點的數,樹的節點從 \(0\) 開始,每個節點可以使白色或者黑色。初始是每個節點的顏色為白色,要求維護下面兩種操作:

資料範圍: \(n\leq 10^5,m\leq 10^5,0\leq d_i\leq 10^6\) 。

點分樹/線段樹。

首先先建出整棵樹的點分樹,然後由於點分樹的高度是 \(\log n\) 的,每次查詢和修改直接暴力跳父親即可。

對點分樹上每個點維護乙個 \(num[i],w[i]\) 分別表示點分樹上 \(i\) 的子樹中黑點的個數,以及 \(i\) 的子樹中黑點到 \(i\) 的距離之和。

每次修改維護一下這兩個陣列,查詢的時候容斥一下就可以得到答案。

#include#include#includeusing namespace std;

#define int long long

const int n = 1e5+10;

int n,m,tot,maxn,root,opt,x;

int f[n],a[n],dis[n],head[n],sum[n],num[n],w[n],siz[n],max_siz[n],fa[n];

bool vis[n],col[n];

struct node

e[n<<1];

inline int read()

while(ch >= '0' && ch <= '9')

return s * w;

}void add(int x,int y,int w)

void get_root(int x,int fa)

max_siz[x] = max(max_siz[x],maxn-siz[x]);

if(max_siz[x] < max_siz[root]) root = x;

}void slove(int x)

}void modify(int x)

}int query(int x)

return res;

}signed main()

fclose(stdin); fclose(stdout);

return 0;

}

給定乙個 \(n × m\) 的棋盤,有障礙、陷阱和寶藏,每個寶藏有權值

要求用折線圍出乙個多邊形,其內部不含有陷阱,最終獲得權值為圍住的寶藏權值之和減去多邊形周長

陷阱和寶藏數量之和不超過 \(8\) 。

資料範圍:\(n,m\leq 20\)

動態規劃。

看了半天題解,沒看懂 \(dp\) 順序是怎麼來的,所以直接搬題解就好了。

題目中已經告訴我們怎麼判斷乙個格仔是否在多邊形內部了,注意這個判斷條件只跟奇偶性有關。

可以以此作為狀態進行狀態壓縮動態規劃,不妨給每個格仔選一條射線,在轉移的過程中更新有寶藏和陷阱的格仔那條射線穿過邊的奇偶性狀態。

\(f[i][j][s]\) 表示當前在 \((i,j)\) 格仔,寶藏和陷阱的射線奇偶性狀態為 \(s\) 時,多邊形周長最小為多少。

但是轉移的順序不好確定,不過因為我們是要周長盡可能小,而且轉移一次只會讓多邊形周長增大1,可以bfs順序轉移,列舉每個寶藏是否被圈入多邊形就可以求出答案了。

時間複雜度:\(o(2^nn^2)\) 。

你在玩一款打怪獸的小遊戲。

怪獸有 \(m\) 點血,你會攻擊怪獸 \(n\) 次,第 \(i\) 次攻擊有 \(p_i\) 的概率是怪獸的血量減少 \(1\)。

怪獸的血量如果變為 \(0\), 就不會在減少了。

求在每次攻擊後,怪獸血量的期望,對 \(998244353\) 取模。

資料範圍:\(1\leq n,m\leq 10^5,0\leq a_i,b_i\leq 998244352\)

期望+分治fft。

設 \(f_i(x)\) 表示第 \(i\) 次攻擊之後,怪獸的減少的血量的生成函式。

顯然有: \(f_i(x) = \displaystyle\sum_^ (p_ix+(1-p_i))\) 。

則有每次攻擊的答案為 \(\displaystyle\sum_^ [x^i] f_i(x) \times (n-i)\) 。

記 \(b(x) = \displaystyle\sum_^ (n-i)x^i\) 。

那麼答案可以表示為 \(\displaystyle\sum_^ [x^i]f_i(x)\times [x^i]b(x)\) 。

考慮用分治來解決這個問題。

注意:\(b(x)\) 只需要保留前 \(r-l+1\) 項的係數。

時間複雜度:\(o(nlog^2n)\)

//咕咕咕咕

省選模擬22

t1看題是計算幾何,想起曾經被支配的恐懼,決定放最後 然後t2差分打錯,理解不深刻,耗了很長很長很長時間,中途十分絕望,還好最後對拍過了。t3只剩40多分鐘,出思路就開始打,到最後樣例還是輸出不對,靜態查不出錯,絕望。下午發現是變數沒清空and賦值放在了輸入前面 好幾次了orz 題意 給定字串s,求...

3 14省選模擬測試

1,40分暴力o n 2 o n 2 o n2 考慮狀態轉移方程 2,100分正解咕 o n 1,30分 暴力 列舉左端點,再列舉長度,然後判斷迴圈節,複雜度o n 2k o frac o kn2 2,100分正解咕 o n 正解 列舉直角邊,然後計算出第三個點,用雜湊表判斷存在性,細節較多需要注意...

省選模擬測試5

因為只有包含關係和不相交關係,就可以根據包含關係 o n 2 建樹,o n 跑樹形dp 考慮優化建樹,把乙個圓看成乙個正方形然後做掃瞄線,線段樹每個節點維護set,存縱座標在這個區間的正方形的編號 需要判四個角,暴力跳就行了 大多數情況下複雜度 o n log 2n 發現 t n,k nc n 1,...