堆 鍊錶 POJ2274 The Race

2021-07-26 23:04:55 字數 914 閱讀 1809

題面在這裡

這道題想法很簡單,但是實現比較複雜……

參考隔壁神犇zzk的題解。

昨天寫好**後,一wa到底,查了近乙個小時……各位同學寫的時候小心。

第一問很簡單,典型的逆序數(由於v很小,可以用陣列代替樹狀陣列)。

至於第二問,要求按順序輸出前10000個「超越事件」,自然就想到用堆來儲存「超越事件」(這裡使用了二叉堆)

用鍊錶儲存賽車的相對位置

每次從堆中取出乙個超越事件,注意有可能是非法的(即該超越事件的兩個參與者已經不相鄰了)

然後就要對這個超越事件進行處理:

原來有四輛賽車:lx,x,y,ry

超越後變成了:lx,y,x,ry

那麼lx與y,x與ry都有可能發生新的「超越事件」,判斷一下放入堆中即可

**如下:

#include#includeusing namespace std;

const

int maxn=250005,tt=1000000;

int n,ans,x[maxn],v[maxn],num[105],len;

int lft[maxn],rit[maxn];

struct ha

void psh(ha x)

void pop()

}double gettime(int i,int j)

double getdist(int i,int j)

ha getha(int x,int y,double t,double d)

int main()v[0]=-1;v[n+1]=200;

printf("%d\n",ans);

for (int o=1;len&&o<=10000;o++)

return 0;

}

堆 鍊錶 POJ2274 The Race 題解

給出n n 250000 輛賽車,i賽車初始在xi,速度為vi,賽車在比賽時會發生超車 不會相撞 求超車次數 1000000,並輸出前10000次 不足10000次有幾次輸出幾次 超車,格式為x y,表示x超過y,時間靠前的先輸出,時間相同位置靠前的先輸出,保證沒有時間相同位置也相同的超車。第一問顯...

堆 鍊錶實現

小頂堆大頂堆的概念大家應該都很熟悉了,如果不了解,可以搜尋一下,網上很多介紹,而且很多原始碼實現,都很簡單。不過從網上看了一些堆的實現,都是用陣列的。但是陣列有乙個缺陷,需要擴充套件時,就要複製原來的記憶體,申請新的空間。所以我在想能不能用鍊錶,發現還真可以,就湊湊寫了個 最後 是寫完了,發現其實鍊...

BZOJ 1150 (堆 鍊錶)

你在一家 it 公司為大型寫字樓或辦公樓 offices 的計算機資料做備份。然而資料備份的工作是枯燥乏味 的,因此你想設計乙個系統讓不同的辦公樓彼此之間互相備份,而你則坐在家中盡享計算機遊戲的樂趣。已知辦公 樓都位於同一條街上。你決定給這些辦公樓配對 兩個一組 每一對辦公樓可以通過在這兩個建築物之...