這道題如果暴力走 o(n^2) 肯定超時 然後看資料5*10^4 時間1s 呃 o(nlogn)一下是能過的
然後 在想我為什麼要o(n^2)走 肯定會有重複的啊 那怎麼省略掉這些呢
很簡單 如果我這個圓盤往下掉 第一層的寬度小於第二層的寬度 那麼很明顯 第二層的寬度是沒有用處的 那麼有用的是什麼呢 是上一層的寬度
也就是說
if(w>=min) width[i]=min;
else
那麼 我們就構造出來了乙個有序序列
這樣我們就能用o(logn)的時間解決這個圓盤到底落在哪了
#include
using
namespace
std;
int width[50005];
int main()
}int l=0,r=n;
int plant;
int ans =0;
bool flag=true;
for(int i=0;icin >> plant;
if(!flag) continue;
int mid ;
int loc=-1;
l=0;
while(l<=r)
else
}if(loc==-1)
//cout << "loc : " << mid << endl;
ans++;
r=loc-1;
}cout
<< ans << endl;
}
51nod 1279 扔盤子(單調棧)
開始是直接從井口往裡扔,複雜度是o n 2 超時。然後呢,你會發現,如果井上邊的寬度小,下邊的寬度大,那麼下邊寬度多大都是沒用的,所以就讓他等於上邊寬度就好了。然後處理後這個井的寬度從上到下就是乙個非遞增的了,然後從下向上匹配,o n 還可以用單調棧預處理 include include const...
51Nod 1279 扔盤子 思維 模擬
題意 有口井,往裡扔盤子,最多扔多少個 思路 如果比較高的地方井口比較小,那麼下面的再大也沒有用,只需要維護乙個單調減的陣列然後o n m 模擬即可 include include include include include include include include include inc...
51 nod 1279 扔盤子 思維好題)
1279扔盤子 基準時間限制 1秒 空間限制 131072kb 分值 10難度 2級演算法題 收藏關注 取消關注 有一口井,井的高度為n,每隔1個單位它的寬度有變化。現在從井口往下面扔圓盤,如果圓盤的寬度大於井在某個高度的寬度,則圓盤被卡住 恰好等於的話會下去 盤子有幾種命運 1 掉到井底。2 被卡...