折半查詢 及 砍樹 木材加工 題解

2021-10-09 10:00:46 字數 2194 閱讀 3875

while

(l<=r)

else

}

伐木工人公尺爾科需要砍倒m公尺長的木材。這是乙個對公尺爾科來說很容易的工作,因為他有乙個漂亮的新伐木機,可以像野火一樣砍倒森林。不過,公尺爾科只被允許砍倒單行樹木。

公尺爾科的伐木機工作過程如下:公尺爾科設定乙個高度引數h(公尺),伐木機公升起乙個巨大的鋸片到高度h,並鋸掉所有的樹比h高的部分(當然,樹木不高於h公尺的部分保持不變)。公尺爾科就行到樹木被鋸下的部分。

例如,如果一行樹的高度分別為20,15,10和17,公尺爾科把鋸片公升到15公尺的高度,切割後樹木剩下的高度將是15,15,10和15,而公尺爾科將從第1棵樹得到5公尺,從第4棵樹得到2公尺,共得到7公尺木材。

公尺爾科非常關注生態保護,所以他不會砍掉過多的木材。這正是他為什麼盡可能高地設定伐木機鋸片的原因。幫助公尺爾科找到伐木機鋸片的最大的整數高度h,使得他能得到木材至少為m公尺。換句話說,如果再公升高1公尺,則他將得不到m公尺木材。

第1行:2個整數n和m,n表示樹木的數量(1<=n<=1000000),m表示需要的木材總長度(1<=m<=2000000000)

第2行:n個整數表示每棵樹的高度,值均不超過1000000000。所有木材長度之和大於m,因此必有解。

第1行:1個整數,表示砍樹的最高高度。

輸入#1

5 20

4 42 40 26 46

輸出#1

36本題中,check的檢查內容即為 所得到的樹的高度總和 是否符合題目

#include

#include

using

namespace std;

int n,m;

int ans=0;

int l=

0,r=0;

int tree[

1000005]=

;//注意資料範圍

bool

check

(int x)

}return s>=m;

//將高度和與需求高度m比較

}int

main()

while

(l<=r)

//簡單的對半查詢

else

}

cout

return0;

}

要保護環境

木材廠有一些原木,現在想把這些木頭切割成一些長度相同的小段木頭(木頭有可能有剩餘),需要得到的小段的數目是給定的。當然,我們希望得到的小段木頭越長越好,你的任務是計算能夠得到的小段木頭的最大長度。木頭長度的單位是cm。原木的長度都是正整數,我們要求切割得到的小段木頭的長度也是正整數。

例如有兩根原木長度分別為11和21,要求切割成到等長的6段,很明顯能切割出來的小段木頭長度最長為5.

第一行是兩個正整數n和k(1 ≤ n ≤ 100000,1 ≤ k ≤ 100000000),n是原木的數目,k是需要得到的小段的數目。

接下來的n行,每行有乙個1到100000000之間的正整數,表示一根原木的長度。

能夠切割得到的小段的最大長度。如果連1cm長的小段都切不出來,輸出」0」。

輸入#1

3 7232

124456

輸出#1

114此題中,check用來判斷 被切割的段數是否符合題目要求

#include

#include

using

namespace std;

int n,k;

//n是原木的數目,k是需要得到的小段的數目

int treelen[

100005]=

;int l=

0,r=0;

int ans=0;

bool

check

(int x)

else

if(x==0)

//無法切割(長度<1)

}return s>=k;

//返回條件!!!!

}int

main()

while

(l<=r)

//簡單的對半查詢

else

} cout

return0;

}

折半查詢思想及實戰程式設計

1.折半查詢要求是陣列是有序為前提 如果不是有序的不能使用 2.提及查詢存在兩種情況,要麼資料存不存在要麼存在下標是多少 下面講解折半查詢的思想 首先定義乙個有序陣列 int array 10 1 10一共有10個資料,將這10個數進行編號,從0開始編號,即0 9 令left 0,right 9,m...

C語言 資料結構查詢 順序查詢及折半查詢

資料結構查詢 順序查詢和折半查詢 順序查詢 思路 從表中最後乙個記錄開始,逐個進行記錄的關鍵字和 給定值的比較,若某個記錄的關鍵字和給定值比較相等,則 返回返回記錄所在的位置,或查詢完所有記錄後還沒有發現 符合的記錄,則查詢失敗。include include include include def...

折半查詢面試題及細節的處理

public class arraydemo6 system.out.println getindex 4 arr,107,0,arr.length 1 折半查詢面試題 給定乙個有序的陣列,如果忘該陣列中儲存乙個元素,並保證這個陣列還是有序的。返回所儲存位置的角標。看到 1.有序的陣列 2.涉及查詢...