四連測(二) 奶牛慢跑

2022-09-18 04:00:37 字數 2063 閱讀 9988

有n(n<=100000)頭奶牛在乙個無窮長的小道上慢跑。每頭奶牛的起點不同,速度也不同。小道可以被分成多條跑到。奶牛只能在屬於自己的跑道上慢跑,不允許更換跑道,也不允許改變速度。如果要慢跑t(t<=1000000000)分鐘,要保證在任何時候不會有同一跑道上的奶牛相遇,請問最少需要多少條跑道。奶牛開始在哪條跑道是可以隨意設定的。

輸入

輸入格式:第一行兩個整數n,t。

接下來的n行,每行包含兩個整數,表示奶牛的位置和速度。位置是非負整數,速度是正整數。所有的奶牛的起點都不相同,按起點遞增的順序給出。

輸出

輸出格式:

最少的跑道數。

樣例輸入

5 3

0 11 2

2 33 2

6 1

樣例輸出

3
要想要求出正確的答案,其實就必須要想到題目中的性質,打出合適的演算法。我們不看每一頭牛當前的速度與位置,因為這樣計算將會十分複雜,我們首先就必須要求出它們在最後的時候到達了**,這樣,逆序的中途即會相遇。

那麼如何求出最少需要的跑道個數呢?考試的時候呢,我是這樣想的,每乙個跑道都是上公升的子串行,那麼就一定滿足條件,這樣求出最小,其實再想一想,如果求出了最長不上公升子串行,不就可以得出答案了嗎?最長不上公升子串行中的元素任意兩兩一定會相遇的。因此,它們都需要單獨乙個跑道,而其他的呢就無所謂了。

因此,這道題就是求乙個最長不上公升子串行,相信這種dp題目大家都會,但樸素的dp演算法時間複雜度是n方的,此題是過不了的。那麼關鍵就是要看如何進行優化了。如果大家看過一些書籍,應該對於運用lower_bound函式進行二分優化的最長不下降子串行有一定印象。確實,這道題可以說就是運用二分進行優化。

二分要滿足單調性,因此我們需要排序。

之後,將陣列中的數一一進行二分,找到合適位置而放進去,保持陣列呈不上公升。

這裡估計有人會有疑問了,為什麼這樣就真能保證陣列合理呢?首先,最長肯定是對的,我們可以很輕鬆判斷出來,但是否真的存在這樣的序列呢?

我們給出簡單的一些資料進行討論 如(3 , 2  , 8) ,處理完後,就變成了( 8 , 2)。很顯然,這一種數列是不存在的。

但我們再看一下,它的長度並沒有變化。最長不下降子串行的長度的確是陣列的長度2。

那麼再在後面加一些資料? (3 , 2 , 8 ,1) , 處理完後,變成了 ( 8 ,2 , 1)。這種數列更奇怪了,然而,答案卻還是這麼多。其實,將8放入隊頭,我們可以看出這可能是乙個更有用的數字,因為它大,所以後面空間可能更大。而放入隊頭,雖然看起來不合理,但並不會改變答案的最優性質。

#include#include#include#include#include#include#include#includeusing namespace std;

#define ll long long

#define n 100005

struct node a[n];

int n,len = 1;

long long maxt , dp [n],t;

int read()

while (s >= '0' && s <= '9')

return f * x;

}int solve(long long x)

else

r = mid;

}if (dp[l] < x)

return l;

else

return r;

}int main()

dp[1] = a[1].x;

for (int i = 2 ;i <= n; i ++ )

else

}printf("%d",len);

}

考試的時候,確實沒有看出這道題的性質,當時卻也是想到了最長不上公升子串行,但總覺得這樣的做法不是最優,至於為什麼,我也不知道。。。考試的時候,我覺得這道題就像是遞迴求出每乙個最長不下降子串行,其實如果我再細細想想的話,這道題不就是求乙個最長不上公升子串行嗎?主要還是被第一題困擾了,打亂了後面所有題的進度。

四連測(二) 測量溫度(temperature)

某國進行了連續n 1 n 1000000 天的溫度測量,測量存在誤差,測量結果是第i天溫度在 l i,r i 範圍內。其中 10 9輸入 第一行乙個整數n。接下來n行,每一行兩個整數,表示l i和r i。輸出 接下來輸出乙個整數,表示答案。樣例輸入 6 6 10 1 54 8 2 56 8 3 5樣...

退役四連測題解(一)

有q只猴子要從第一棵樹到第n棵樹去,第i只猴子一次跳躍的最遠距離為ki。如果它在第x棵樹,那它最遠可以跳到第x ki棵樹。如果第j棵樹的高度比第i棵樹高或相等,那麼它從第i棵樹直接跳到第j棵樹,它的勞累值會增加1。所有猴子一開始在第一棵樹,請問每只猴子要跳到第n棵樹花費的勞累值最小。第一行乙個整數n...

社團四連測之第一測 Monkey

目錄題目 解題思路 題目描述 有q只猴子要從第一棵樹到第n棵樹去,第i只猴子一次跳躍的最遠距離為ki。如果它在第x棵樹,那它最遠可以跳到第x ki棵樹。如果第j棵樹的高度比第i棵樹高或相等,那麼它從第i棵樹直接跳到第j棵樹,它的勞累值會增加1。所有猴子一開始在第一棵樹,請問每只猴子要跳到第n棵樹花費...