牛客网【每日一题】4月17日题目精讲 华华给月月准备礼物
文章目錄
- 題目描述
- 題解:
- 代碼:
- 推薦例題:
試題鏈接
時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 32768K,其他語言65536K
64bit IO Format: %lld
題目描述
二月中旬虐狗節(jié)前夕,華華決定給月月準(zhǔn)備一份禮物。為了搭建禮物的底座,華華需要若干根同樣長的木棍。華華手頭上有一些長度參差不齊的木棍,他想將每根都裁剪成若干段自己想要的長度,并丟掉多余的部分。因?yàn)槿A華的手很巧,所以他的裁剪過程不會有任何的失誤。也就是說,對于一根長度為N的木棍,華華可以精準(zhǔn)的將它們裁剪為若干段木棍,使它們的長度之和為N。
華華不知道裁剪成多長比較好,所以干脆越長越好。不過由于華華有點(diǎn)強(qiáng)迫癥,所以他希望長度為非負(fù)整數(shù)。保證所有木棍的原長也是非負(fù)整數(shù)。那么請問華華最終得到的每根木棍多長呢?
輸入描述:
第一行兩個正整數(shù)N、K,表示木棍原本的根數(shù)和華華希望得到的木棍根數(shù)。 第二行N個正整數(shù)Li表示每根木棍的初始長度。
輸出描述:
輸出一行一個非負(fù)整數(shù)表示每根木棍的最大長度。
示例1
輸入
輸出
1說明
如果長度為2,只能得到2+2+2+2+1=9根,不夠;長度為1可以得到4+4+4+5+3=20根,足夠。所以答案最大是1。
示例2
輸入
輸出
3備注:
題解:
二分的模板題吧
我們假設(shè)最后結(jié)果是ans,那么小于等于ans的答案都是符合條件的(只是不是最大),而大于ans的肯定不行,那ans怎么確定呢?
這里就用到二分,一開始左界left=1,右界right=最長的木棍長度(也可以初始值為1e9+1,因?yàn)槟竟髟匍L也不可能大于1e9),然后去這段區(qū)間的中間值mid,然后判斷mid是否符合條件,如果符合條件,說明mid左邊的都可以,右邊的不一定,右邊有可能還有更優(yōu)的答案,也可以沒有,所以left=mid+1,開始探索mid右邊的未知區(qū)域。但如果不符合條件,說明當(dāng)前mid右邊更不符合,只有左邊才存在符合條件,right=mid-1,探索左邊區(qū)域,一直這樣二分找到最佳答案
代碼:
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=2e5+4; ll l[maxn]; int n,k;ll sum; ll check(ll len) {sum=0;for(int i=1;i<=n;i++)sum+=l[i]/len;return sum; } int main() {cin>>n>>k;for(int i=1;i<=n;i++)cin>>l[i];ll ans=0;ll left=1,right=1e9+1,mid;while(left<=right){mid=(left+right)>>1;if(check(mid)>=k){left=mid+1;ans=mid;}else {right=mid-1;}}cout<<ans;return 0; }推薦例題:
NC16462 跳石頭
noip day2 T1題目,也是經(jīng)典的二分題目,剛學(xué)二分的可以練練手
總結(jié)
以上是生活随笔為你收集整理的牛客网【每日一题】4月17日题目精讲 华华给月月准备礼物的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 消息称英伟达针对中国区改良版H20在LL
- 下一篇: vivo X100系列首发自研芯片V3: