NC205725. L1-6分鸽子
描述
输入描述
第一行两个正整数 n, m,分别表示鸽子的数量和小伙伴的数量。第二行 n 个正整数,表示 n 只鸽子的重量。
输出描述
一行内输出一个非负整数,表示每个小伙伴分到的鸽子肉重量。
示例1
输入:
3 5 3 4 7
输出:
2
C++14(g++5.4) 解法, 执行用时: 60ms, 内存消耗: 2156K, 提交时间: 2020-07-30 13:08:51
#include<bits/stdc++.h> using namespace std; typedef long long ll; int main(){ ll n,m,a[100010],ans=0; cin>>n>>m; for(int i=0;i<n;i++){ cin>>a[i]; ans+=a[i]; } ll l=1,r=ans/m; while(l<=r){ ll mid=(l+r)>>1; ll cnt=0; for(int i=0;i<n;i++){ cnt+=a[i]/mid; } if(cnt>=m){ l=mid+1; }else{ r=mid-1; } } cout<<r<<endl; }
C++11(clang++ 3.9) 解法, 执行用时: 29ms, 内存消耗: 852K, 提交时间: 2020-07-02 22:14:40
#include<bits/stdc++.h> using namespace std; int a[100005]; int main() { int i,j,n,m,l,r,mid,ans; scanf("%d%d",&n,&m); for(i=0;i<n;i++)scanf("%d",&a[i]); for(l=1,r=1e9;l<=r;) { mid=(l+r)>>1; for(i=j=0;j<m&&i<n;i++)j+=a[i]/mid; if(j>=m)ans=mid,l=mid+1; else r=mid-1; } printf("%d\n",ans); return 0; }