本題中,我們將用符號[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 ...