Knapsack Cryptosystem

超大背包

折半查找

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define P pair<ll,int>
ll A[];
ll C[];
bool B[]; ll s,_n;
vector<P> v1,v2;
void dfs(int i,ll x,int n,bool f)
{ P a;
a.first=x;
int t=;
if(f)
for(int i=; i<n; i++)
{
t=t*+B[i];
}
else
{
for(int i=_n/; i<n; i++)
{
t=t*+B[i];
}
}
a.second=t;
if(f)
v1.push_back(a);
else v2.push_back(a); if(i==n)return ;
else
{
B[i]=;
dfs(i+,x+A[i],n,f);
B[i]=;
dfs(i+,x,n,f);
}
}
int main()
{
scanf("%lld%lld",&_n,&s);
for(int i=; i<_n; i++)
{
scanf("%lld",&A[i]);
}
dfs(,,_n/,);
dfs(_n/,,_n,);
sort(v1.begin(),v1.end());
sort(v2.begin(),v2.end());
int n=v1.size();int m=v2.size();
for(int i=;i<n;i++){
ll x=v1[i].first;
ll t=s-x;
int l=,r=m-;
while(l+<r){
//cout<<l<<r<<'\n';
int mid=(l+r)/;
if(v2[mid].first>t){
r=mid-;
}else if(v2[mid].first==t){
l=mid;
break;
}
else {
l=mid+;
}
}
// cout<<x<<" "<<v2[l].first<<'\n';
stack<int>st;
if(v2[l].first==s-x){
int _=v1[i].second;
for(int i=;i<_n/;i++){
st.push(_%);
_/=;
}
while(!st.empty()){
cout<<st.top();
st.pop();
}
_=v2[l].second;
for(int i=_n/;i<_n;i++){
st.push(_%);
_/=;
}
while(!st.empty()){
cout<<st.top();
st.pop();
}
break;
} }
}

Knapsack Cryptosystem的更多相关文章

  1. [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem

    链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...

  2. 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem——哈希表&&二进制枚举

    题意 有长度为 $n$($1\leq n\leq 36$)的数列,给出 $s$,求和为 $s$ 的子集,保证子集存在且唯一. 分析 答案肯定是来自左右半边两部分组成的. 如果我们用哈希表存一半,计算另 ...

  3. 2019牛客暑期多校训练营(第九场)-D Knapsack Cryptosystem (折半搜索)

    题目链接:https://ac.nowcoder.com/acm/contest/889/D 题意:题意简单,从大小为36的集合中选若干元素使得他们的和为sum. 思路:第一感觉用搜索,复杂度为2^3 ...

  4. 2019牛客多校第⑨场D Knapsack Cryptosystem(折半搜索)

    原题:https://ac.nowcoder.com/acm/contest/889/D 题意: 给定大小为n(<=36)的集合a,整数s,求a的一个和为s的子集(有且只有一个) 思路: 直接搜 ...

  5. 牛客多校第九场 D Knapsack Cryptosystem 背包

    题意: 给你32个物品,给定一个容积,让你恰好把这个背包装满,求出装满的方案 题解: 暴力计算的话,复杂度$2^{32}$肯定会炸,考虑一种类似bsgs的算法,先用$2^{16}$的时间遍历前一半物品 ...

  6. Knapsack Cryptosystem 牛客团队赛

    时限2s题意: 第一行包含两个整数,分别是n(1 <= n <= 36)和s(0 <= s <9 * 10 18) 第二行包含n个整数,它们是{a i }(0 <a i ...

  7. 2019牛客暑期多校训练营(第九场) D Knapsack Cryptosystem

    题目 题意: 给你n(最大36)个数,让你从这n个数里面找出来一些数,使这些数的和等于s(题目输入),用到的数输出1,没有用到的数输出0 例如:3  4 2 3 4 输出:0 0 1 题解: 认真想一 ...

  8. NEERC-2017

    A. Archery Tournament 用线段树套set维护横坐标区间内的所有圆,查询时在$O(\log n)$个set中二分查找即可. 时间复杂度$O(n\log^2n)$. #include& ...

  9. 中国科学技术大学第五届信息安全大赛(hackergame2018自我总结)2

    这一批题都是我不会的,只能把官方write-up放在这里了 1.FLXG 的秘密 ----------------------------------------------------------- ...

随机推荐

  1. js while循环

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  2. 解读Nodejs多核处理模块cluste

    http://blog.fens.me/nodejs-core-cluster/ Node.js开发框架Express4.x   http://blog.fens.me/nodejs-express4 ...

  3. HNUSTOJ-1520 压缩编码

    1520: 压缩编码 时间限制: 1 Sec  内存限制: 2 MB提交: 107  解决: 54[提交][状态][讨论版] 题目描述 某工业监控设备不断发回采样数据.每个数据是一个整数(0到1000 ...

  4. 自动清理ES索引脚本

    #/bin/bash #指定日期(3个月前) DATA=`date -d "3 month ago" +%Y.%m.%d` #当前日期 time=`date` #删除3个月前的日志 ...

  5. JavaScript生成简单数字验证码

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...

  6. 解决solr无法加core

    提示缺少配置文件:Error CREATEing SolrCore 'new_core': Unable to create core [new_core] Caused by: Can't find ...

  7. 学习R的悬疑录(不定期更新)

    在使用caret包建模时候,没有导入机器学习包,如rpart.randomForest等,并不会对结果有影响.不知道是不是caret包内置了机器学习模块. # 加载r包 library(data.ta ...

  8. MIT-线性代数公开课

    本博客是学习MIT-线性代数笔记,Gilbert Strang大神讲的通俗易懂,感兴趣的可以观看视频 其中习题集请点击 01)方程组的几何解释 02)矩阵消元 03)乘法和逆矩阵 04)A的LU分解 ...

  9. Python3找出List中最大_最小的N个数及索引

    # -*- coding: utf-8 -*- import heapq nums = [1, 8, 2, 23, 7, -4, 18, 23, 24, 37, 2] # 最大的3个数的索引 max_ ...

  10. Python核心技术与实战——六|异常处理

    和其他语言一样,Python中的异常处理是很重要的机制和代码规范. 一.错误与异常 通常来说程序中的错误分为两种,一种是语法错误,另一种是异常.首先要了解错误和异常的区别和联系. 语法错误比较容易理解 ...