hdu5884
- #include <cstdio>
- #include <queue>
- #include <algorithm>
- #include <string.h>
- //#include <bits/stdc++.h>
- using namespace std;
- const int maxn=;
- int t;
- int a[maxn+];
- int sum[maxn+];
- int n,m;
- bool judge(int mid){
- priority_queue<int,vector<int>,greater<int> > q;
- int cnt=;
- int s=(n-)%(mid-);
- if(s){
- s++;
- int temp=sum[(n-)%(mid-)+];
- q.push(temp);
- cnt+=temp;
- }
- for(int i=s+;i<=n;i++){
- q.push(a[i]);
- }
- while(q.size()!=){
- int temp=;
- for(int i=;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=,ub=n;
- while(ub-lb>){
- int mid=(ub+lb)>>;
- if(judge(mid)) ub=mid;
- else lb=mid;
- }
- if(judge(lb)){
- return lb;
- } else return ub;
- }
- int main()
- {
- scanf("%d",&t);
- while(t--){
- sum[]=;
- scanf("%d%d",&n,&m);
- if(n<=){
- printf("1\n");
- continue;
- }
- for(int i=;i<=n;i++){
- scanf("%d",&a[i]);
- sum[i]=sum[i-]+a[i];
- }
- sort(a+,a++n);
- for(int i=;i<=n;i++){
- sum[i]=sum[i-]+a[i];
- }
- //printf("%d\n",judge(3));
- int ans=solve();
- printf("%d\n",ans);
- }
- return ;
- }
hdu5884的更多相关文章
- hdu5884 Sort(二分+k叉哈夫曼树)
题目链接:hdu5884 Sort 题意:n个有序序列的归并排序.每次可以选择不超过k个序列进行合并,合并代价为这些序列的长度和.总的合并代价不能超过T, 问k最小是多少. 题解:先二分k,然后在k给 ...
- hdu5884(多叉哈夫曼树)
hdu5884 题意 给出 n 个数,每次选择不超过 k 个数合并(删掉这些数,加入这些数的和),花费为合并的这些数的和,要求最后只剩下一个数,问 k 最小取多少. 分析 二分 k,合并数的时候可以按 ...
- Sort HDU5884(二分+多叉哈夫曼树)
HDU5884 Sort 题意:有n个序列要进行归并,每次归并的代价是两个序列的长度的和,要求最终的代价不能超过规定的T,求在此前提下一次能同时进行归并的序列的个数k. 思路:还是太单纯,看完题目一直 ...
- hdu5884 Sort
//--------------------------------------------------------------- /*---贪心策略+二分+队列 -----将原数组排序,然后每次取k ...
- hdu5884 Sort(二分)
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...
- Sort(hdu5884)
Sort Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- 在js实现矩阵转置
var arr=[[2,4,6,8],[8,9,0,-1],[9,6,2,1]]; //定义一个新的数组 var arr2=[]; for(var i=0;i<arr[0].length;i++ ...
- findbugs规则
FindBugs是基于Bug Patterns概念,查找javabytecode(.class文件)中的潜在bug,主要检查bytecode中的bug patterns,如NullPoint空指针检查 ...
- Hotel California
On a dark desert highway行驶在昏黑的荒漠公路上cool wind in my hair凉风吹过我的头发warm smell of colutas温馨的大麻香rising up ...
- FAQrobot 聊天机器人笔记
follow: https://github.com/ofooo/FAQrobot 这是一个简单的基于问词匹配的自动问答,获取与用户问句Q1最匹配的知识库中的问句Q2,Q2的答案就是Q1的答案. 首 ...
- linux C++ scandir 的使用
() 头文件 #include <dirent.h> () 函数定义 int scandir(const char *dir,struct dirent **namelist,int (* ...
- NO0:重新拾起C语言
因工作所需,重新捡起C语言,之前在学校里有接触过,但现在已经忘的一干二净了,现决定重新开始学习,为工作,为生活. 以<标准 C程序设计 第5版>的课程进行基础学习,同时以另外两本书为辅助, ...
- BZOJ3230 相似子串[后缀数组+二分+st表]
BZOJ3230 相似子串 给一个串,查询排名i和j的子串longest common suffix和longest common prefix 思路其实还是蛮好想的,就是码起来有点恶心.可以发现后缀 ...
- JavaScript中的eval()函数详解
和其他很多解释性语言一样,JavaScript同样可以解释运行由JavaScript源代码组成的字符串,并产生一个值.JavaScript通过全局函数eval()来完成这个工作 eval(“1 ...
- Python手记
字符串的拼接 1.“+”,如果是字符和数字相连,要使用str()函数对于数字进行字符转化: 2.join() 3.",",链接的两个字符串之间用空格做关联 4.占位符 tmp += ...
- bzoj 1202 [HNOI2005]狡猾的商人——带偏移量的并查集
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1202 带偏移量的并查集. 注意先 find() 再调用 dis !!! 自己的对拍太水了. ...