NOIP2016 蚯蚓 D2 T2 佇列

2022-05-21 17:30:13 字數 1473 閱讀 9616

本題中,我們將用符號[c]表示對c向下取整,例如:[3.0」= [3.1」=[3.9」=3。蛐蛐國最近蚯蚓成災了!隔壁跳蚤國的跳蚤也拿蚯蚓們沒辦法,蛐蛐國王只好去請神刀手來幫他們消滅蚯蚓。蛐蛐國裡現在共有n只蚯蚓(n為正整數)。每只蚯蚓擁有長度,我們設第i只蚯蚓的長度為a_i(i=1,2,...,n),並保證所有的長度都是非負整數(即:可能存在長度為0的蚯蚓)。每一秒,神刀手會在所有的蚯蚓中,準確地找到最長的那乙隻(如有多個則任選乙個)將其切成兩半。神刀手切開蚯蚓的位置由常數p(是滿足0

第一行包含六個整數n,m,q,u,v,t,其中:n,m,q的意義見問題描述;

u,v,t均為正整數;你需要自己計算p=u/v(保證0

第二行包含n個非負整數,為ai,a2,...,an,即初始時n只蚯蚓的長度。

同一行中相鄰的兩個數之間,恰好用乙個空格隔開。

保證1<=n<=10^5,0

第一行輸出[m/t]個整數,按時間順序,依次輸出第t秒,第2t秒,第3t秒……被切斷蚯蚓(在被切斷前)的長度。

第二行輸出[(n+m)/t]個整數,輸出m秒後蚯蚓的長度;需要按從大到小的順序依次輸出排名第t,第2t,第3t……的長度。

同一行中相鄰的兩個數之間,恰好用乙個空格隔開。即使某一行沒有任何數需要 輸出,你也應輸出乙個空行。

請閱讀樣例來更好地理解這個格式。

3 7 1 1 3 1

3 3 2

3 4 4 4 5 5 6

6 6 6 5 5 4 4 3 2 2

題解:開三個佇列,p1裝的是原來的n個蚯蚓(排好序),p2,p3分別表示每一次切割後分成u/v和(v-u)/v的段,每次取3個佇列中隊首最大的元素進行切割,容易發現在每次切割後p2,p3始終具有單調性。每次對所有元素加p,只需要將now+=p,計算時在統一加上now就可以了。

考場上用的stl的queue,結果只拿了60多分,被人家用手寫堆和讀入優化80多分完虐了~

所以必須用手寫佇列+讀入優化,否則還是會tle

#include#include#includeusing namespace std;

int n,m,q,u,v,t,now;

int a[100010];

struct queue

int front()

void pop()

int empty()

}p[3];

int getbig()

}int readin()

int main()

p[1].push((long long)(x+now)*u/v-now-q);

p[2].push((x+now)-(long long)(x+now)*u/v-now-q);

now+=q;

}printf("\n");

i=0;

while(!p[0].empty()||!p[1].empty()||!p[2].empty())

}return 0;

}

蚯蚓 NOIP2016D2T2 單調佇列

本題中,我們將用符號 c 表示對c向下取整,例如 3.0 3.1 3.9 3。蛐蛐國最近蚯蚓成災了!隔壁跳蚤國的跳蚤也拿蚯蚓們沒辦法,蛐蛐國王只好去請神刀手來幫他們消滅蚯蚓。蛐蛐國裡現在共有n只蚯蚓 n為正整數 每只蚯蚓擁有長度,我們設第i只蚯蚓的長度為a i i 1,2,n 並保證所有的長度都是非...

暑假 D2 T2 熱點

輸入 輸入檔案為hotspot.in。輸入的第一行為兩個正整數n,m。接下來的m行,每行描述乙個事件。輸出 輸出檔案為hotspot.out。輸出僅一行,n個整數,第i個數表示第i個人總共收到的動態數。輸入輸出樣例1 hotspot.in hotspot.out 2 8 s 1 s 2 l 1 2 ...

NOIP2016提高組day2 蚯蚓

本題中,我們將用符號 lcj 表示對 c 向下取整,例如 l3.0j l3.1j l3.9j 3 蛐蛐國最近蚯蚓成災了!隔壁跳蚤國的跳蚤也拿蚯蚓們沒辦法,蛐蛐國王只好去 請神刀手來幫他們消滅蚯蚓。蛐蛐國裡現在共有 n 只蚯蚓 n 為正整數 每只蚯蚓擁有長度,我們設第 i 只匠 蚓的長度為 ai i ...