2016 ACM/ICPC Asia Regional Qingdao Online hdu 5884 Sort (智商+队列)★
来源:互联网 发布:金山数据恢复账号密码 编辑:程序博客网 时间:2024/06/02 02:18
利用合并的单调性,可以去掉优先队列得到O(nlogn)
的做法:先对所有数排序,另外一个队列维护合并后的值,取值时从两个序列前端取小的即可。
借鉴别人的思路,好简单啊
#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <cstdlib>#include <algorithm>#include <cmath>#include <vector>#include <set>#include <list>#include <queue>#include <map>#include <bitset>using namespace std;#define L(i) i<<1#define R(i) i<<1|1#define INF 0x3f3f3f3f#define pi acos(-1.0)#define eps 1e-3#define maxn 100100#define MOD 1000000007int n;long long m;int a[maxn];int solve(int x){ int cnt = n; while(cnt >= x) cnt -= x-1; return x - cnt;}int main(){ int t,C = 1; scanf("%d",&t); while(t--) { scanf("%d%lld",&n,&m); for(int i = 0; i < n; i++) scanf("%d",&a[i]); sort(a,a+n); int l = 1,r = n; while(r - l > 1) { int mid = (l+r) / 2; queue<int> q1,q2; int k = solve(mid); if(k != mid-1) { for(int i = 0; i < k; i++) q1.push(0); } for(int i = 0; i < n; i++) q1.push(a[i]); long long ssum = 0; while(!q1.empty() || !q2.empty()) { int cnt = 0; long long sum = 0; while(cnt < mid) { if(q1.empty() && q2.empty()) break; if(!q1.empty() && !q2.empty()) { if(q1.front() < q2.front()) { sum += q1.front(); q1.pop(); } else { sum += q2.front(); q2.pop(); } } else if(!q1.empty()) { sum += q1.front(); q1.pop(); } else { sum += q2.front(); q2.pop(); } cnt++; } if(cnt <= 1) break; q2.push(sum); ssum += sum; if(ssum > m) break; } if(ssum <= m) r = mid; else l = mid; } printf("%d\n",r); } return 0;}
0 0
- 2016 ACM/ICPC Asia Regional Qingdao Online hdu 5884 Sort (智商+队列)★
- 2016 ACM/ICPC Asia Regional Qingdao Online hdu 5884 Sort (二分+优先队列)★
- HDU 5884 Sort 2016 ACM/ICPC Asia Regional Qingdao Online
- HDU 5884 Sort 2016 ACM/ICPC Asia Regional Qingdao Online 1007
- 2016 ACM/ICPC Asia Regional Qingdao Online hdu 5881 Tea (模拟构造)★
- HDU 5879 Cure 2016 ACM/ICPC Asia Regional Qingdao Online
- HDU 5878 -- 丑数打表(2016 ACM/ICPC Asia Regional Qingdao Online)
- HDU 5878 -- 丑数打表(2016 ACM/ICPC Asia Regional Qingdao Online)
- 【2016 ACM/ICPC Asia Regional Qingdao Online】
- 2016 ACM/ICPC Asia Regional Qingdao Online
- 2016 ACM/ICPC Asia Regional Qingdao Online
- 2016 ACM/ICPC Asia Regional Qingdao Online(8题)
- 2016 ACM/ICPC Asia Regional Qingdao Online(Cure)
- 2016 ACM/ICPC Asia Regional Qingdao Online(Balanced Game)
- HDU 5881 Tea (水题) 2016 ACM/ICPC Asia Regional Qingdao Online
- HDU 5889 Barricade (最小割) 2016 ACM/ICPC Asia Regional Qingdao Online
- 2016 ACM/ICPC Asia Regional Qingdao Online hdu 5889 Barricade (最短路+最小割)
- 欧拉路——HDU 5883 (2016 ACM/ICPC Asia Regional Qingdao Online 1006)
- Presto源码解析(LocalExecutationPlanner类)
- leetCode练习(17)
- 1113. Integer Set Partition
- Java小白笔记--集合
- JS实现密码加密
- 2016 ACM/ICPC Asia Regional Qingdao Online hdu 5884 Sort (智商+队列)★
- 微信jsapi扫一扫接口实现(4)
- C++查看任意数据类型比特位串
- Android应用启动流程分析
- 异步处理任务工具类(AsyncTask)实现多张图片的下载(已知url)
- 第三周项目1-顺序表的基本运算
- Unity客户端架构-Util
- 初识Volley的基本用法
- 【NOIP2016提高A组模拟9.15】Map