牛客資料結構佇列訓練題 蚯蚓

2021-09-25 20:00:14 字數 1440 閱讀 5704

啊啊啊,好懷念,2023年的noip的試題,欸,當時我還是個小白,現在也是菜雞,這道用三個佇列即可完成

首先,我們來分析下對於每對 x1,x2(x1>x2) 他們被剪斷後的操作

1、對於每一對x1,x2(x1>x2):

​ p1=x1p , p2=x1-x1p;

​ p3=x2p , p4=x2-x2p;

​ 明顯p1>=p3,p2>=p4;

2、在剪斷x1 t秒後再剪斷x2

​ p1=x1p+qt , p2=x1-x1p+qt;

​ p3=(x2+qt)p , p4=(x2+qt)-(x2+qt)*p;

​ 同樣明顯p1>=p3,p2>=p4;

也就是說最先剪斷並儲存下來的,一定比之後剪斷儲存下來的先接受 咔嚓;

我們開三個陣列(佇列),第乙個儲存原來長度的順序,第二個儲存剪斷後的p1,第三個儲存剪斷後的p2;

後面兩個的儲存順序由上面證明的結論說明,每次新增只需要往佇列後新增即可。

上**:

#include

#define ll long long

const

int maxn=

8e6+7;

using namespace std;

struct lineqy[3]

[maxn]

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

int l[3]

,r[3];

bool cmp

(line a,line b)

intmain()

sort

(qy[0]

+1,qy[0]

+1+n,cmp)

; l[0]

=l[1

]=l[2]

=1,r[0

]=n,r[1]

=r[2]=

0;for(

int i=

1;i<=m;i++)}

if(i%t==0)

printf

("%lld "

,zlen)

; l[k]++;

qy[1]

[++r[1]

].len=zlen*u/v , qy[1]

[r[1]]

.ti=i;

qy[2]

[++r[2]

].len=zlen-qy[1]

[r[1]]

.len , qy[2]

[r[2]]

.ti=i;

} cout

int i=

1;i<=n+m;i++)}

if(i%t==0)

printf

("%lld "

,zlen)

; l[k]++;

}return0;

}

牛客資料結構單調棧訓練題 Bad Hair Day

嘛,這是一道之前在比賽的時候和左學長研究過的題,多虧了左學長,現在這題能秒出。解題方法是這樣的 每次在棧裡放入乙個高度,但放入之前,需要保證棧裡面的元素是單調的,就相當於對於每乙個比當前高度高的牛都做了貢獻,每次答案加上單調棧裡面的元素個數即可,很簡單 上 include using namespa...

牛客網選擇題 資料結構

1 字串www.qq.com所有非空子串 兩個子串如果內容相同則只算乙個 個數是 1024 1018 5550 正確答案 d 解析 初始想法是組合問題,想錯了。字串概念理解錯誤。比如,abc的子串 a b c ab bc abc和乙個空子串 共 3 2 1 1 個 兩個字串 ab,bc,沒有ac.串...

牛客網 簡單的資料結構

慄醬有一天在網上衝浪的時候發現了一道很有意思的資料結構題。該資料結構形如長條形。一開始該容器為空,有以下七種操作。1 a從前面插入元素a 2 從前面刪除乙個元素 3 a從後面插入乙個元素 4 從後面刪除乙個元素 5 將整個容器頭尾翻轉 6 輸出個數和所有元素 7 對所有元素進行從小到大排序 只有一組...