考試反思 0214省選模擬24 揣測

2022-02-03 02:15:27 字數 3723 閱讀 1270

還行吧。至少不算炸。雖說這個分的確也不怎麼樣。

考試的時候覺得$t2$是個計數,部分分好像還挺多,應該可想。

然後在$t2$上剛了仨小時,因為做的題不夠會的知識點也不夠所以只有簽到分。

$t1$的話貪心暴力隨便寫就是了用不到乙個小時。

然而其實$t1$是最可想的乙個。。。應該吧。。。

這種難度的題以目前水平想出一道可能就要幾個小時,所以一場考試基本只能壓一道題。

$t2$早就有了$36$分的思路,然而最關鍵的一步居然是個其他題的結論,聽說過但沒記住,於是就沒了。

得虧$t3$是個噁心的原題,然而沒有刪,基本上也沒人拿到分,所以沒有被拉開差距。

得$t1$者得天下了。

下午改題,倆題加起來剛好一下午,然後晚上回去做了道大爺昨天講的分治題。

然而點分治和樹上分塊還是一道題都沒有寫,$kdtree$和$cdq$以及諸如此類的不少鍋也還沒有修。。。

然後又去補習$t2$的知識點,生成函式,多項式復合逆。有點抽象,還沒有學完。

拿著$lnc$的$wc$課件啃生成函式解圖論計數,也不是很明白。但願明天能多聽懂一些。

數學的確是塊硬骨頭啊。。。

t1:u.n.owen就是她嗎?

大意:$n$堆石子,$m$次操作。每次操作要求$[l_i,r_i]$中取出$k_i$石子。不夠則盡量多的取。要求之前操作取的盡量多的前提下每次最多多少。

保證操作區間不包含。$n,m \le 300000$

看著題意就像貪心。

問題轉化為二分圖匹配(神一步):把需求排序後,需求和**分別拆出等於石子數量的點,然後是二分圖最大匹配。

運用$hall$定理。因為詢問不包含,所以相交的詢問可以合併成乙個大的再進行匹配,同理也就不必考慮子集。

首先把不被任何詢問包含的石子扔掉,不然字首和會出問題。

設石子數的字首和陣列為$a$。設排序後前$i$個詢問拿的石子數是$b_j$。

有對於任意$i這樣與$i,j$相關的就分別移動到一邊了。也即對於任意$i前字尾關係,區間最值,詢問是兩個最值相減,詢問結束後按照陣列含義發現是字尾加。

每次操作時發現涉及變化的限制也就是$d[1,t] ,c[t,m]$

都是區間操作,線段樹隨便來就好了。

1 #include2

using

namespace

std;

3#define s 1234567

4#define lc p<<1

5#define rc lc|1

6#define md (cl+cr>>1)

7int

c[s],d[s],lzc[s],lzd[s],n,m,a[s],o[s];

8struct qs}q[s];

9void up(int p)

10void down(int

p)14

void build(int p,int cl,int

cr)16 build(lc,cl,md);build(rc,md+1

,cr);up(p);17}

18void chgc(int l,int w,int p=1,int cl=1,int cr=m) down(p);

20if(l<=md)chgc(l,w,lc,cl,md);chgc(l,w,rc,md+1

,cr); up(p);21}

22void chgd(int l,int w,int p=1,int cl=1,int cr=m) down(p);

24if(l<=md)chgd(l,w,lc,cl,md);chgd(l,w,rc,md+1

,cr); up(p);25}

26int askc(int l,int p=1,int cl=1,int cr=m)

30int askd(int r,int p=1,int cl=1,int cr=m)

34int

main()

view code

t2:哈德曼的妖怪少女

生成函式,邊雙計數,多項式復合逆。知識點待補。

t3:平安時代的外星人

大意:網格圖,邊帶權,若干特殊格仔,求從左上角出發包住所有特殊格仔的最短有向可自交環。$n,m \le 400$

需要把問題弄得形象化一點。我們需要給它圈起來,大概就是在不割斷它們之間路徑的情況下,從左上角走到左上角。

路徑?最短路樹啊!如果你最後的路徑包住了整棵最短路樹,那麼一定把所有特殊點都包進去了。

而且可以證明,你最後的路徑的確不會切斷最短路樹上的邊。

所以現在問題是怎麼包住它。

直接做不行,考慮拆點。每個格點依據網格分成左上左下右上右下4個點。

正常情況下它們之間可以0費直接到達,但是如果中間有樹邊就不行,否則會割斷最短路樹。

其餘的在原網格邊兩側的四個點,建上原圖的邊,邊權不變即可。

陣列大小值得研究,要注意邊數是$400 \times 400 \times 4 \times 4$的。

然後從左上角格點的右上角出發到達左下角跑最短路就可以了。

**稍微有點噁心。

1 #include2

using

namespace

std;

3#define s 3688888

4#define inf 1234567890123456789ll

5int o[555][555],pc,n,m,k,nt[555][555],ec=1,fir[s],l[s],to[s],w[s],e[2][555][555];6

int al[555][555],x[s],y[s],ban[2][555][555

],pre[s],ok[s];

7long

long dt[s]; priority_queuelong

long,int> >q;

8void link(int a,int b,int v)

9void con(int a,int b,int v=0)

10int o(int x,int y,int v)

11int

main()al[0][0]=1;23

for(int lx,ly,x,y,i=0;ifor(int j=0;x=i,(y=j)if(nt[i][j])while(!al[x][y])

24 lx=x[pre[o[x][y]]],ly=y[pre[o[x][y]]],ban[y==ly][min(x,lx)][min(y,ly)]=1,al[x][y]=1,x=lx,y=ly;

25for(int i=1;i<=pc;++i)fir[i]=0; ec=1;26

for(int i=4;i1

<<2;++i)ok[i]=1;27

for(int i=0;ifor(int j=0;jif(nt[i][j])ok[o(i,j,3)]=ok[o(i,j+1,2)]=ok[o(i+1,j,1)]=ok[o(i+1,j+1,0)]=0;28

for(int i=0;i<=n;++i)for(int j=0;j<=m;++j)

34for(int i=1;i<=m;++i)con(o(0,i,0),o(0,i,1

));35

for(int i=1;i<=n;++i)con(o(i,0,0),o(i,0,2

));36

for(int i=4;i1

<<2;++i)dt[i]=inf; q.push(make_pair(dt[5]=0,5

));37

while(!q.empty())cout<6]<

42 }

view code

考試 省選24

還是好難啊。t1是 hall 定理的應用。hall 定理是這樣的 對於乙個二分圖,設左部點全集為 r 右補點於某個左部點集合相接的並為 t s 那麼這個二分圖存在完美匹配,當且僅當 forall s in r rightarrow s leq t s 然後根據這個定理進行邏輯推理可以推斷出沒必要對所...

考試反思 0502省選模擬86 恐懼

還是狀態持續不佳。但是今天沒那麼困,雖說腦子還是不想動。一看到原題就慫,毛病。好像考場上遇到原題的話,得分會比非原題還低。t2 作為原題就直接放棄正解了 然後乖乖的打部分分,結果教練把子任務放錯了於是丟了 15pts 放錯子任務同時也導致 直接輸出 0 能多 20 分。啊人就應該有信仰啊為什麼我沒輸...

考試反思 0316省選模擬47 偏頗

這套題的考察思路其實不錯。三暴力,掛乙個。t1 是送分,但是一眼覺得是大資料結構,於是直接扔掉了。結果竟然是個原題。dy 講的只記住了只言片語思路早就忘了。好歹這次會了。t2 的話寫了個亂搞,結果把本來到手的 20 給寫死迴圈了,加了句判斷就 50 了。t3 差不多想到正解了,但是毒瘤出題人不給部分...