Codeforces Round #540 (Div. 3) D2. Coffee and Coursework (Hard Version) (二分,贪心)
2024-10-19 05:58:52
题意:有\(n\)个数,每次可以选\(k(1\le k\le n)\)个数,并且得到\(a_1+max(0,a_2-1)+max(0,a_3-2)+...+max(0,a_k-k+1)\)的贡献,问最少选多少次使得总贡献不小于\(m\).
题解:我们从大到小排序,然后二分答案,贪心,如果答案是\(k\)天,那么对于前\(k\)个数,我们一定单独选它们分配到不同的\(k\)个集合中,然后再重复这个过程,从\(k+1\)个数开始循环分配到不同j集合中,这样一定能得到最大的贡献.
代码:
ll n,m;
ll a[N];
ll sum; bool check(ll x){
ll res=0;
ll cnt=0;
ll num=0;
for(int i=1;i<=n;++i){
res+=max((ll)0,a[i]-num);
cnt++;
if(cnt==x) num++,cnt=0;
}
if(res>=m) return true;
return false;
} bool cmp(ll a,ll b){
return a>b;
} int main() {
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;++i){
cin>>a[i];
sum+=a[i];
} if(sum<m){
cout<<-1<<endl;
return 0;
}
sort(a+1,a+1+n,cmp);
ll l=1,r=n;
while(l<r){
int mid=(l+r)>>1;
if(check(mid)){
r=mid;
}
else l=mid+1;
} cout<<l<<endl; return 0;
}
最新文章
- 2、Redis入门介绍
- 使用python原生的方法实现发送email
- Mac按键
- 获取当前访问的url
- Linux操作系统的简单认识
- JavaScript入门(9)
- Hibernate一级缓存、二级缓存
- google模拟各种Android手机浏览器方法
- hadoop hdfs 命令行 设置文件夹大小的上限 quota:配额
- Microsoft 收购 Apiphany
- Reveal 使用详解
- OOP的五大原则
- Mysql报错:Packet for query is too large (1121604 >; 1048576).You can change this value on the server by setting the max_allowed_packet variable
- 四. Python基础(4)--语法
- 慢查询日志分析工具之mysqldumpslow
- IIS的应用程序池优化方法
- mysql错误号代表的含义
- PCIE 调试过程记录
- C++实现从一个文件夹中读出所有txt文件
- Windows下面安装和配置Solr 4.9(一)
热门文章
- H5手机网页元素识别
- CopyOnWriteArrayList 读写分离,弱一致性
- 【Java】Jsoup爬虫,一个简单获取京东商品信息的小Demo
- kubernets与API服务器进行交互
- Python输出有颜色的文字
- 工作记录:记一次线上ZK掉线问题排查
- SP338 ROADS
- 2V升5V的升压芯片,两款芯片电路图
- Caffeine 缓存库
- ensure that both new and old access_token values are available within five minutes, so that third-party services are smoothly transitioned.