首页 > 代码库 > hdu5884
hdu5884
#include <cstdio>#include <queue>#include <algorithm>#include <string.h>//#include <bits/stdc++.h>using namespace std;const int maxn=100000;int t;int a[maxn+10];int sum[maxn+10];int n,m;bool judge(int mid){ priority_queue<int,vector<int>,greater<int> > q; int cnt=0; int s=(n-1)%(mid-1); if(s){ s++; int temp=sum[(n-1)%(mid-1)+1]; q.push(temp); cnt+=temp; } for(int i=s+1;i<=n;i++){ q.push(a[i]); } while(q.size()!=1){ int temp=0; for(int i=1;i<=mid;i++){ if(!q.empty()){ temp+=q.top(); q.pop(); } else { break; } } q.push(temp); cnt+=temp; } return cnt<=m;}int solve(){ int lb=2,ub=n; while(ub-lb>1){ int mid=(ub+lb)>>1; if(judge(mid)) ub=mid; else lb=mid; } if(judge(lb)){ return lb; } else return ub;}int main(){ scanf("%d",&t); while(t--){ sum[0]=0; scanf("%d%d",&n,&m); if(n<=1){ printf("1\n"); continue; } for(int i=1;i<=n;i++){ scanf("%d",&a[i]); sum[i]=sum[i-1]+a[i]; } sort(a+1,a+1+n); for(int i=1;i<=n;i++){ sum[i]=sum[i-1]+a[i]; } //printf("%d\n",judge(3)); int ans=solve(); printf("%d\n",ans); } return 0;}
hdu5884
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。