• 题意:有\(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;
    }

最新文章

  1. 2、Redis入门介绍
  2. 使用python原生的方法实现发送email
  3. Mac按键
  4. 获取当前访问的url
  5. Linux操作系统的简单认识
  6. JavaScript入门(9)
  7. Hibernate一级缓存、二级缓存
  8. google模拟各种Android手机浏览器方法
  9. hadoop hdfs 命令行 设置文件夹大小的上限 quota:配额
  10. Microsoft 收购 Apiphany
  11. Reveal 使用详解
  12. OOP的五大原则
  13. Mysql报错:Packet for query is too large (1121604 &gt; 1048576).You can change this value on the server by setting the max_allowed_packet variable
  14. 四. Python基础(4)--语法
  15. 慢查询日志分析工具之mysqldumpslow
  16. IIS的应用程序池优化方法
  17. mysql错误号代表的含义
  18. PCIE 调试过程记录
  19. C++实现从一个文件夹中读出所有txt文件
  20. Windows下面安装和配置Solr 4.9(一)

热门文章

  1. H5手机网页元素识别
  2. CopyOnWriteArrayList 读写分离,弱一致性
  3. 【Java】Jsoup爬虫,一个简单获取京东商品信息的小Demo
  4. kubernets与API服务器进行交互
  5. Python输出有颜色的文字
  6. 工作记录:记一次线上ZK掉线问题排查
  7. SP338 ROADS
  8. 2V升5V的升压芯片,两款芯片电路图
  9. Caffeine 缓存库
  10. ensure that both new and old access_token values are available within five minutes, so that third-party services are smoothly transitioned.