当前位置:网站首页>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;
}
边栏推荐
- ES、Kibana 8.0安装
- CheckBox列表项选中动画js特效
- 【使用 Pytorch 实现入门级的人工神经网络】
- leetcode 899. 有序队列
- 461. 汉明距离
- 双线性插值公式推导及Matlab实现
- leetcode refers to Offer 58 - II. Left Rotate String
- ES6 introduction and let, var, const
- XSS线上靶场---Warmups
- Lecture topics and guest blockbuster, TDengine developers conference to promote data technology "broken"
猜你喜欢
15年软件架构师经验总结:在ML领域,初学者踩过的五个坑
【kali-漏洞利用】(3.2)Metasploit基础(上):基础知识
解决npm -v查看npm版本出现npm WARN config global `--global`, `--local` are deprecated. Use `--location报错
False label aggregation
2022-8-3 第七组 潘堂智 锁、多线程
华为设备配置VRRP与BFD联动实现快速切换
剑指 Offer 07. 重建二叉树
Often forget HiFlow 】 【 check-in?Use tencent cloud scenario connector to remind you every day.
Cesium 修改鼠标样式
Interesting opencv - record image binarization and similarity
随机推荐
buildscript和allprojects的作用和区别是什么?
leetcode 326. Powers of 3
Leetcode sword refers to Offer 15. 1 in the binary number
不专业面试官的经验总结
15 years experience in software architect summary: in the field of ML, tread beginners, five hole
直播小程序源码,UI自动化中获取登录验证码
XSS线上靶场---haozi
从开发到软件测试:除了扎实的测试基础,还有哪些必须掌握 ?
XSS practice - cycle and two cycle problem at a time
华为设备配置VRRP与BFD联动实现快速切换
华为设备VRRP配置命令
史兴国对谈于佳宁:从经济模式到落地应用,Web3的中国之路怎么走?
好朋友离职了,一周面试了20多场,我直呼内行
华为设备配置VRRP与BFD联动实现快速切换
ECCV 2022 | 清华&腾讯AI Lab提出REALY:重新思考3D人脸重建的评估方法
直播平台怎么搭建,针对输入框的各种组件
尚医通项目总结
if _name_ == “__main__“:NameError: name ‘_name_‘ is not defined
面试官:为什么 0.1 + 0.2 == 0.300000004?
svg+js订单确认按钮动画js特效