題面在這裡
這道題想法很簡單,但是實現比較複雜……
參考隔壁神犇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 的計算機資料做備份。然而資料備份的工作是枯燥乏味 的,因此你想設計乙個系統讓不同的辦公樓彼此之間互相備份,而你則坐在家中盡享計算機遊戲的樂趣。已知辦公 樓都位於同一條街上。你決定給這些辦公樓配對 兩個一組 每一對辦公樓可以通過在這兩個建築物之...