一場訓練賽

2022-05-13 20:49:36 字數 1096 閱讀 2535

未解決的題

並查集+ 

樹狀陣列。

如果不考慮抽出書本的操作,這是一道相對簡單的並查集題目,只需給每本書再開乙個域,記錄其上有多少本書即可。我們發現,當書堆起來的時候,可以按照從上到下的順序給每本書重新編號,

如果抽出一本書,則可以在這本書的新編號上標記

-1,表示刪除。如果要統計書本

i(設書本

i的新編號為

y)上有多少本書,則可以把它最上面的那本書的新編號

x找出來,數x到

y之間有多少本書被刪掉,然後就能得解。從這時候想到了什麼?

樹狀陣列!所以,我們先把所有操作存起來,然後進行一次堆書的操作,這時候不考慮抽出書,根據最後的書在各自書堆的順序,給乙個新編號。最後,重新進行一次堆書操作,這時候就能利用新編號對書本進行刪除操作了,用樹狀陣列快速統計。

時間複雜度:

o(並查集

) + o(mlongn)

計算幾何(叉積的應用)

叉積:p(x1,y1),q(x2,y2) p*q=x1y2-x2y1若p

×q>0,則p

在q的順時針方向;若p

×q<0,則p

在q的逆時針方向;若p

×q=0,則p

和q共線,但可能同向也可能反向;

int cross(point p0,point p1,point p2)

本題的思路:

1.如果

p[i]

與p[i-1]

是乙個點,輸出

stand

2。如果

cross(p[i],p[i-1],p[i-2])>0,

則是right

3.如果

cross(p[i],p[i-1],p[i-2])<0,

則是left

4.如果

cross(p[i],p[i-1],p[i-2])==0

則共線,然後需要再判斷一下是向前還是向後。

對於按順序訪問的點

a->b->c,如果

b在ac之間,輸出

toward

如果是c在ab

之間或者a在

cb之間,則為

backward

19級暑假第一場訓練賽

題目出自 codeforces round 547 div.3 includeusing namespace std typedef long long ll ll n,m bool flag int cnt 資料不大,暴力深搜 void dfs int now,int step if now m ...

牛客寒假第一場訓練賽

比賽鏈結 題解b題 構造題先找構造括號效率比較高的方法 這種括號裡面套括號效率比較高而且合法 所以思路就是對所給整數開方,剩餘的零頭我們用列舉的方法。但是對於一些資料直接用開方得到的數x構造的話,會導致零頭太小,不好構造零頭 第一步構造的是乙個對稱的括號,有x個左括號,如果零頭小於x的話,就不好構造...

10 29訓練賽第一場B題

題目大意 有n個隊伍之間比賽,每兩個隊伍之間都有一場比賽,因此一共有n n 1 2場比賽,但是這裡丟失了一場比賽的記錄,現在讓你通過n n 1 2 1場仍然存在的比賽記錄來判斷丟失的那條比賽記錄 是什麼。解題報告 因為每兩個隊伍之間都有一場比賽,所以每個隊伍都應該有n 1次比賽,所以只要統計存在 的...