当前位置:网站首页>D - Project Planning--二分
D - Project Planning--二分
2022-08-03 21:03:00 【秦小咩】
Time Limit: 2 sec / Memory Limit: 1024 MB
Score : 400400 points
Problem Statement
KEYENCE has NN departments, where A_iAi employees belong to the ii-th department (1 \leq i \leq N)(1≤i≤N). No employee belongs to multiple departments.
The company is planning cross-departmental projects. Each project will be composed of exactly KK employees chosen from KK distinct departments.
At most how many projects can be made? No employee can participate in multiple projects.
Constraints
- 1 \leq K \leq N \leq 2 \times 10^51≤K≤N≤2×105
- 1 \leq A_i \leq 10^{12}1≤Ai≤1012
- All values in input are integers.
Input
Input is given from Standard Input in the following format:
NN KK A_1A1 A_2A2 \ldots… A_NAN
Output
Print the maximum possible number of projects.
Sample Input 1 Copy
Copy
3 3 2 3 4
Sample Output 1 Copy
Copy
2
There can be two projects, each composed of three employees from distinct departments.
Sample Input 2 Copy
Copy
4 2 1 1 3 4
Sample Output 2 Copy
Copy
4
Sample Input 3 Copy
Copy
4 3 1 1 3 4
Sample Output 3 Copy
Copy
2
=========================================================================
数据范围小的话优先队列贪心是很容易理解的。但本题需要二分,或许用到的这个结论是很普遍,需要特殊记住的计数问题,那就是n个小组,每组k个物体,要求组内不能重复,那么最终判定条件是所有小于等于n(大于n取等于n)的个数要 >= n*k,也就是说,只要数量够了,一定能构造出来不重复n个序列,很不好想或者去证明,只能说是一个计数结论罢了
注意r太大会爆掉,故我们取r=1e18/k,再乘k的时候就不会爆掉了,当然128位也是很方便。
题目没一般说明我们都是在1e18内获取答案的
# include <iostream>
# include<vector>
# include<queue>
# include<map>
# include<vector>
# include<algorithm>
# include<cstring>
# include<iomanip>
# include<set>
# include<math.h>
using namespace std;
typedef __int128 ll;
__int128 read(){
__int128 x=0,f=1;
char ch=getchar();
while(!isdigit(ch)&&ch!='-')ch=getchar();
if(ch=='-')f=-1,ch=getchar();
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return f*x;
}
void print(__int128 x){
if(x<0)putchar('-'),x=-x;
if(x>9)print(x/10);
putchar(x%10+'0');
}
ll a[200000+10];
ll k,n;
bool check(ll mid)
{
ll sum=0;
for(int i=1;i<=n;i++)
{
sum+=min(mid,a[i]);
}
return mid*k<=sum;
}
int main()
{
n=read();
k=read();
for(int i=1;i<=n;i++)
{
a[i]=read();
}
ll l=1,r=1e18;
while(l<=r)
{
ll mid=(l+r)>>1;
if(check(mid))
l=mid+1;
else
r=mid-1;
}
print(r);
return 0;
}
边栏推荐
- XSS线上靶场---prompt
- Power button - 203 - remove the list elements linked list
- win10安装及配置Gradle
- 基于DMS的数仓智能运维服务,知多少?
- 直播源码开发,各种常见的广告形式
- Leetcode 125. Verify palindrome string
- 【kali-漏洞扫描】(2.1)Nessus下载安装(上)
- 华为设备配置VRRP与BFD联动实现快速切换
- 收藏-即时通讯(IM)开源项目OpenIM-功能手册
- leetcode 1837. The sum of the digits in the K-base representation
猜你喜欢
XSS线上靶场---prompt
How can a cloud server safely use local AD/LDAP?
XSS线上靶场---haozi
ECCV 2022 | 清华&腾讯AI Lab提出REALY:重新思考3D人脸重建的评估方法
Zero trust, which has been popular for more than ten years, why can't it be implemented?
检测和控制影子IT的五个步骤
chartjs自定义柱状图插件
svg胶囊药样式切换按钮
Often forget HiFlow 】 【 check-in?Use tencent cloud scenario connector to remind you every day.
这几个常用 alias,带你高效做事(下)
随机推荐
华为设备配置VRRP与BFD联动实现快速切换
在树莓派上搭建属于自己的网页(4)
CheckBox列表项选中动画js特效
leetcode 125. 验证回文串
From September 1st, my country has granted zero-tariff treatment to 98% of tax items from 16 countries including Togo
如何使用 Jmeter获取登录token并设置为全局变量?
华为设备配置VRRP负载分担
2021年数据泄露成本报告解读
idea2021配置svn报错Cannot run program “svn“ (in directory “xxx“):CreateProcess error=2,系统找不到指定的文件
通关剑指 Offer——剑指 Offer II 009. 乘积小于 K 的子数组
3种圆形按钮悬浮和点击事件
直播源码开发,各种常见的广告形式
Power button 206 - reverse list - the list
[kali-vulnerability scanning] (2.1) Nessus download and installation (on)
tidyverse based on data.table?
leetcode 231. 2 的幂
反射机制
Engineering Effectiveness Governance for Agile Delivery
leetcode 072. Finding Square Roots
leetcode 268. 丢失的数字(异或!!)