秦皇島集訓,ACM比賽第三場

2021-08-22 08:42:19 字數 1115 閱讀 7538

lls:zxr你很過分,好幾天都不更部落格了,你又偷懶了。。。

zxr:沒有啊,這幾天很忙,忙不過來就這樣了。

lls:那你打好知識框架,回去再慢慢填啊!

zxr:好的好的。

(自動忽略)

好不容易放假一天,所以把前面的東西補一補。

第二天的知識是計算幾何。

關於計算幾何我就聽懂下面幾個知識,懂的大神不要來d我。

這時,我們就要知道乙個東西,叫做叉積,叉積op(線段1,線段2)=1y1*2y2-1y2*2y1(順序不能顛倒,而且要保證ab的x端點重合)。然後我們用這個東西可以做很多事情,像凸包,還有很多很多,但是我不會,以後要刷題積累學習。

到了下午,又是激動人心的比賽了。

到了這,給大家講講我賽場上a的和補過的題吧。

第一題:給出n個點的數,要你求每個點所在的聯通塊的個數。

這道題就是樹上構造dp。

我們當然會求每個點在子樹內的聯通塊的個數。(直接f [ i ] = pai(f[ j ] + 1) ( j is i's son))

這時候如果要求整棵樹,那麼問題就出現在我們怎麼統計將x提成根時,非子樹邊的乘積。

我們構造乙個d[i]表示非子樹邊的聯通塊個數,然後繼承的時候,d[i]=(d[fa[i]]+1)*pai(f[j]+1)(j is fa[i]'son && j!=i)

然後乙個節點,知道了d[i]和f[i],我們就可以知道乙個點的答案是d[i]*f[i].

期望複雜度(n);

第二題:n件商品,你有m個購物車。n個商品中有些是凳子。如果某個購物車有凳子,那麼你就可以將該購物車最貴的商品半價購買。

這題很簡單,直接從大到小排一遍序,那能半價的就是min(tot凳子總個數,m);

第三題:給出n個點的樹,求把他分成m個聯通塊,可顛倒順序,求方案總數。

公式ans=c(n-1,m-1)*sum[m];(sum為字首和)

第四題:判定二分圖,還是存在奇環。

二分圖dfs,奇環你就先把每個邊雙聯通分量求出來,在乙個乙個找,每次標記乙個depth,假如u是v的祖先(不是父親),而且v到u有一條邊,那麼就說明成環了。再用dep[v]-dep[u]+1來判斷是否為奇環即可。

暫時只會那麼多,之後會學更多演算法來解決問題。

lls:我很滿意。。

2019牛客暑期ACM集訓多校第三場

1.emmmm,牛客這場多校題目還是挺平和的,但是,由於隊伍狀態不是很好 玄學卡常所以沒打好。2.首先上來時字串,這個之前寫過最長的相等01串,子串行就是01出現的次數取個最小值的2倍。然後隨便寫寫ac了。用的是dp寫的,看了其他大佬把1看作1,0看作 1,然後計算字首和也挺好的。3.然後是h,由於...

牛客寒假集訓營第三場

題目 c題暴力搜尋 include using namespace std int n,k,r,ans struct ty a 20 pos 10 bool xiangjiao int i,int j intcalc return cnt void dfs int dep for int i 7 i...

2020hdu多校第三場比賽及補題

1004 tokitsukaze and multiple 隊友半小時內a了這題,強的一匹 給一列數,每次可以把相鄰的兩個數合併成乙個大數 比如12,74合併成86 給乙個數字p,問通過這樣的操作,最多能使這數列中多少數是p的倍數 舉例 p 3,數列為 2,1,3,2,1 該數列可以變成3,3,3,...