题解:搜索+二分

对于每个数有选与不选两种情况。然后我们先搜前一半的状态,每个数选还是不选。

有2^17种,然后我将每种状态拍一个序先存着。然后我再搜后一半的状态,2^18种。

假设后一半某一种情况的子集和为w,我们二分的答案为t,那么我们在前一半二分找t-w。

就是前一半和后一半拼成了一个子集。如果子集全在后一半怎么办?因为前一半有个空集,

空集和后一半拼子集还是只在后一半的。

代码:没有评测的地方 我(*゜ロ゜)ノ瞎写的

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 200000
#define LL long long
using namespace std; int n,an,k,bn,p,q,a[maxn];
LL l,r,mid,ans,g[maxn],f[maxn]; bool check(LL t){
int all=;
for(int i=;i<=q;i++){
LL w=t-f[i];
int c=lower_bound(g+,g+p+,w)-g;
all+=p-c+;
}
return all>=k;
} int main(){
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)scanf("%d",&a[i]),r+=a[i];
an=n/;bn=n-an;
for(int st=;st<(<<an);st++){
LL all=;
for(int i=;i<an;i++)
if((st>>i)&)all+=a[i+];
g[++p]=all;
}
for(int st=;st<(<<bn);st++){
LL all=;
for(int i=;i<bn;i++)
if((st>>i)&)all+=a[n-i];
f[++q]=all;
}
sort(g+,g+p+);sort(f+,f+q+);
while(l<=r){
mid=(l+r)>>;
if(check(mid)){
ans=mid;l=mid+;
}else r=mid-;
}
printf("%lld\n",ans);
return ;
}

第K大子集-LH的更多相关文章

  1. 关于“枚举{0,1,...,n-1}所包含的所有大小为k的子集”的理解

    前言 今天整理以前的竞赛笔记时,发现了当时写的一个模板: 枚举{0,1,-,n-1}所包含的所有大小为k的子集: int comb = (1 << k) - 1; while (comb ...

  2. 快速排序 && 寻找第K大(小)的数

    参考:https://minenet.me/2016/08/24/quickSort.html 快速排序 利用分治法可将快速排序的分为三步: 在数据集之中,选择一个元素作为"基准" ...

  3. [LeetCode] Kth Largest Element in an Array 数组中第k大的数字

    Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...

  4. POJ2985 The k-th Largest Group[树状数组求第k大值+并查集||treap+并查集]

    The k-th Largest Group Time Limit: 2000MS   Memory Limit: 131072K Total Submissions: 8807   Accepted ...

  5. 区间第K大(一)

    Problem: 给定无序序列S:[b, e),求S中第K大的元素. Solution 1.裸排序 2.现将区间均分成两段,S1, S2,对S1,S2分别排序,然后

  6. 寻找数组中的第K大的元素,多种解法以及分析

    遇到了一个很简单而有意思的问题,可以看出不同的算法策略对这个问题求解的优化过程.问题:寻找数组中的第K大的元素. 最简单的想法是直接进行排序,算法复杂度是O(N*logN).这么做很明显比较低效率,因 ...

  7. [51nod1685]第k大区间

    Description 定义一个长度为奇数的区间的值为其所包含的的元素的中位数. 现给出$n$个数,求将所有长度为奇数的区间的值排序后,第$k$大的值为多少. Input 第一行两个数$n$和$k$. ...

  8. 数据结构2 静态区间第K大/第K小

    给定数组$A[1...N]$, 区间$[L,R]$中第$K$大/小的数的指将$A[L...R]$中的数从大到小/从小到大排序后的第$K$个. "静态"指的是不带修改. 这个问题有多 ...

  9. POJ 2985 The k-th Largest Group(树状数组 并查集/查找第k大的数)

    传送门 The k-th Largest Group Time Limit: 2000MS   Memory Limit: 131072K Total Submissions: 8690   Acce ...

随机推荐

  1. SpringBoot启动流程分析(六):IoC容器依赖注入

    SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...

  2. hdu3579(线性同余方程组)

    Hello Kiki Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  3. 牛人blog汇总

    1.天一思维: https://blog.csdn.net/tszty1997?t=1

  4. 九度OJ 1202:排序 (排序)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:19711 解决:6508 题目描述: 对输入的n个数进行排序并输出. 输入: 输入的第一行包括一个整数n(1<=n<=100). ...

  5. font awesome (图标字体库)

    Font Awesome fa是什么? 图标字体库和CSS框架 怎么用? <link rel="stylesheet" href="https://cdn.boot ...

  6. 2017-2018-1 20179209《Linux内核原理与分析》第九周作业

    理解进程调度时机 进程调度时机 中断处理过程(包括时钟中断.I/O中断.系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule(): 内 ...

  7. Servlet学习笔记【1】--- 背景和基础知识(CGI、Web服务器发展史、Servlet简介、任务、继承结构)

    本文主要讲Servlet的基础知识和背景知识. 1 CGI简介 CGI(Common Gateway Interface 公共网关接口)是WWW技术中最重要的技术之一,有着不可替代的重要地位.CGI是 ...

  8. fkwの题目(祝松松生日快乐!)

    麓山国际实验学校 傅少,匡哥和巨夫出的题目(共3道) 一.题目概况 题目名称 打地铺 泡妹子 开房间 题目类型 传统 传统 传统 可执行文件名 deeeep soccer room 输入文件名 dee ...

  9. db2数据库还原

    1.建好数据库比如TEST,建的时候将codepage设为与目标备份的codepage一致,比如: 437  2.然后备份一下刚建好的数据库,备份成功后,将20141127目录删除,然后将原来备份好的 ...

  10. IONIC3 打包安卓apk详细过程(大量图文)

    经历三天的踩坑,跳坑,相信绝大多数的问题都已经覆盖到了,请仔细按照流程来对照操作及检查. 1.基本依赖环境 nodejs环境 (作为一个前端相信你已经有了)  最好提前配置好node的环境变量,便于全 ...