日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1731: 数棍子(二分,最后一个大于等于)

發布時間:2024/9/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1731: 数棍子(二分,最后一个大于等于) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1731: 數棍子
時間限制: 1 Sec 內存限制: 128 MB

[提交][狀態][討論版]
題目描述
假如你手頭上有一些長度參差不齊的木棍,他想將每根都裁剪成若干段自己想要的長度,并丟掉多余的部分。因為你的手很巧,所以你的裁剪過程不會有任何的失誤。也就是說,對于一根長度為N的木棍,你可以精準的將它們裁剪為若干段木棍,使它們的長度之和為N。

你不知道裁剪成多長比較好,所以干脆越長越好。不過由于你有點強迫癥,所以你希望長度為非負整數。保證所有木棍的原長也是非負整數。那么請問你最終得到的每根木棍多長呢?

輸入
第一行兩個正整數N、K,表示木棍原本的根數和華華希望得到的木棍根數。

第二行N個正整數
L
i
表示每根木棍的初始長度。
多組數據輸入
1≤N≤2×1e5,1≤Li≤1e9,1≤K≤1e9

輸出
輸出一行一個非負整數表示每根木棍的最大長度

樣例輸入

5 10 4 4 4 5 3 5 3 1 2 3 4 5

樣例輸出

1 3

提示
第一組數據:如果長度為2,只能得到2+2+2+2+1=9根,不夠;長度為1可以得到4+4+4+5+3=20根,足夠。所以答案最大是1

來源
Ac_code:

#include <bits/stdc++.h> using namespace std; typedef long long LL; const LL maxn = 2e5+5; LL a[maxn]; int main() {LL n,k;while(~scanf("%lld%lld",&n,&k)){LL l = 1,r = 0;LL ans = 0;LL sum = 0;for(LL i = 0; i < n; i++){scanf("%lld",&a[i]);sum += a[i];r = max(a[i],r);}if(sum <= k){if(sum == k) ans = 1;printf("%lld\n",ans);continue;}while(l <= r){LL mid = (l+r)>>1;LL cnt = 0;for(LL i = 0; i < n; i++){cnt += a[i]/mid;}if(cnt >= k){l = mid + 1;}else{r = mid - 1;}}ans = r;printf("%lld\n",ans);}return 0; }

總結

以上是生活随笔為你收集整理的1731: 数棍子(二分,最后一个大于等于)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。