用户:
PlumSteven查看:0 回复:1 评论:0 创建时间:2023-12-15T22:40:26
以前的代码:(1年半前)
#include <iostream>
#include <algorithm>
using namespace std;
long long length[100001];
long long getSum(long long n, long long mid){
long long sum=0;
for(int i=0;i<n;i++){
sum+=length[i]/mid;
}
return sum;
}
int main()
{
int n, k;
cin >> n >> k;
long long sum=0;
for(int i=0;i<n;i++){
cin >> length[i];
sum+=length[i];
}
if(sum < k){
cout << 0 << endl;
return 0;
}
sort(length, length+n);
long long low=0, high=sum/k, cnt=0, mid=(low+high)/2;
while(low!=mid){
cnt = getSum(n, mid);
if(cnt < k){
high = mid;
}
else if(cnt >= k){
low = mid;
}
mid = (low+high)/2;
}
cout << mid << endl;
return 0;
}
现在(这是同一道题)
#include <bits/stdc++.h>
using namespace std;
#define PII pair<int, int>
#define PLL pair<long, long>
#define PR pair
#define VI vector<int>
#define VLL vector<long long>
#define VC vector
#define QI queue<int>
#define QLL queue<long long>
#define QU queue
#define DQI deque<int>
#define DQLL deque<long long>
#define DQ deque
#define MPII map<int, int>
#define MPSI map<string, int>
#define MPIS map<int, string>
#define MPSS map<string, string>
#define STR string
#define FUI(a, b, c) for(int i=a;i<=b;i+=c)
#define FDI(a, b, c) for(int i=a;i>=n;i-=c)
#define FUJ(a, b, c) for(int j=a;j<=b;j+=c)
#define FDJ(a, b, c) for(int j=a;j>=n;j-=c)
#define FUK(a, b, c) for(int k=a;k<=b;k+=c)
#define FDK(a, b, c) for(int k=a;k>=n;k-=c)
#define LOOP while(1)
#define PB push_back
#define lowbit(x) x&-x
#define LB(a, b, c) lower_bound(a, b, c);
#define UB(a, b, c) upper_bound(a, b, c);
#define MP(a, b) make_pair(a, b);
//二分会用的
#define BINS_L while(l<r)
#define BINS_INITI(_l, _r) int l=_l, r=_r, mid=0
#define BINS_INITL(_l, _r) long long l=_l, r=_r, mid=0
#define BINS_MID mid=l+(r-l)/2
#define BINS_CHK bool check(int x)
typedef long long ll;
typedef double db;
const int maxn=1000001;
int a[maxn];
int n, m;
BINS_CHK{
int tmp=0;
FUI(1, n, 1) tmp+=(a[i]/x);
return tmp>=m;
}
int main()
{
scanf("%d%d", &n, &m);
FUI(1, n, 1) scanf("%d", &a[i]);
BINS_INITI(0, (int)1e8);
BINS_L{
BINS_MID;
if(check(mid)) l=mid+1;
else r=mid;
// printf("%d\n", mid);
}
if(mid<1) printf("0");
else printf("%d", l-1);
return 0;
}