二分專題題解

2021-08-21 20:31:37 字數 1833 閱讀 3740

題目大意為給一條直線上的n個點,讓你隨意選取c個點,然後使得這c個點兩兩之間的最小距離最大,如何選取這c個點使這個最小距離最大,輸出最大的最小距離max。

先把座標排序,之後界定二分的範圍,二分的縮小範圍的條件則為當兩點距離大於所輸入的點時,s++,返回s。如若s大於所處的點,說明值太小,將左界變為mid+1,反之將右界賦值為mid-1;當左界與右界之差小於1的時候跳出迴圈,輸出。

#include#include#includeint mini(int x,int a,int n)	}	

return(s);

}int comp(const void*a,const void*b)

int main()

printf("%d\n",left-1); }

return 0;

}

題意是給了n個石頭,給了它們到起點的距離,還有乙個終點。問要去掉這n個石頭中的m個,使得其間距的最小值最大。

這題放在這裡是因為和第一題類似。**只要稍作修改就可以ac。與第一題的區別在於,放多少頭牛變為了減去後石頭所剩,但因為收尾不能動,所以需要有n-m+2個。其他過程相似,在做的時候有個小疑問,就是如何確保首尾一定放著牛,但後來發現是杞人憂天。

#include#include#includeint mini(int x,int a,int n)

// if(s>n-m)

// return 1; }

return s;

}int comp(const void*a,const void*b)

int main()

printf("%d\n",left-1); }

return 0;

}

題意:有一些衣服,每件衣服有一定水量,有乙個烘乾機,每次可以烘一件衣服,每分鐘可以烘掉k。每件衣服沒分鐘可以自動蒸發掉一滴水,用烘乾機烘衣服時不蒸發。問最少需要多少時間能烘乾所有的衣服。

這裡進行的二分是對時間的二分,尋找乙個最小時間。先設定邊界,再取中間值。當中間值的時間大於烘乾所用的時間時,說明時間短,對left邊界取mid+1,相反,則說明時間還有縮減的可能,將right取mid-1,當left>right時跳出。

#includeint judge(long long mid,long long a,long long k,long long n)

} return 1;

}int main()

}scanf("%lld",&k);

l=0;

r=max;

if(k==1)

else

else l=mid;

//printf("%d\n",r);}}

printf("%d\n",r);

} return 0;

}

題意 有一根繩子的長度為l,在有溫度的情況下會變形為乙個圓弧,長度為 l1 = (n*c+1)*l;求圖中的h;並說明增加的長度不超過原長度的一半。

數學問題,找到公式後用二分法確定精度。

#include#includeconst double esp=1e-8;

int main()

if(l==0||n==0||c==0)

double low=0.0;

double high=0.5*l;

double mid;

s=(1+n*c)*l;

while(high-low>esp)

printf("case %d: %.7lf\n",i,mid);}}

return 0;

}

整體二分專題

何謂整體二分?一般的二分只適用於單個詢問的,如果有很多個詢問,就變成了n 2n 2 n2或更高但整體二分則可以迅速處理多個詢問的問題 首先需要離線,讀入所有詢問 然後我們二分答案,這時候我們將詢問分成兩個部分,如果l r就直接更新答案,否則考慮分治,詢問的答案在左邊的丟到左邊,答案在右邊的則丟到右邊...

專題總結 二分搜尋專題

1.1從有序陣列中查詢某值 陣列長 目標值 int n,k int arr n void solve return lst 此時 fst 1 lst stl關於二分的應用 stl lower bound begin,end,key 從陣列的begin位置到end 1位置二分查詢第乙個大於或等於num...

分巧克力題解 整數二分

兒童節那天有 k 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友們。小明一共有 n 塊巧克力,其中第 i 塊是 hi wi 的方格組成的長方形。為了公平起見,小明需要從這 n 塊巧克力中切出 k 塊巧克力分給小朋友們。切出的巧克力需要滿足 形狀是正方形,邊長是整數 大小相同 例如一塊 6 5...