「题解」:毛一琛/$cow$ $subsets$
问题 A: 毛一琛/$cow$ $subsets$
时间限制: 1 Sec 内存限制: 512 MB
题面
题面谢绝公开。
题解
题名貌似是个大神??看起来像是签到题然后就死了。
首先$O(3^n)$算法显然。也显然过不去$20$的测试点。
正解是赫赫有名的$meet$ $in$ $the$ $middle$算法。数据在40以内的都能用$meet$ $in$ $the$ $middle$??
对于两半路径,可以拼起来并且构成合法答案的条件是两人获得的分数相同。
所以一个比较聪明的办法是,不去记录两个人各自得到了多少分,而是记录两个人得分的差。
至于谁减谁无所谓,相同的话把其中一个翻转就好了。不搞相反也可以避免重复。
于是我们开一个$map$,对于每一个在前一半路径得到的差值映射一个编号。并以之为下标存储前一半扫过的状态,方便拼接。
对于后一半路径扫过的差值,在$map$里查询,有就拼上,状态置1。
代码:
#include<bits/stdc++.h>
#define rint register int
using namespace std;
int n,a[],tot,ans;
bool vis[(<<)+];
map <int,int> m;
vector <int> v[];
inline void dfs1(rint k,rint res,rint con)
{
if(k==n/+)
{
if(m.find(res)==m.end())m[res]=++tot;
int lin=m[res];v[lin].push_back(con);
return ;
}
dfs1(k+,res,con);
dfs1(k+,res+a[k],con|(<<k-));
dfs1(k+,res-a[k],con|(<<k-));
return ;
}
inline void dfs2(rint k,rint res,rint con)
{
if(k==n+)
{
if(m.find(res)!=m.end())
{
int lin=m[res];
for(rint i=;i<v[lin].size();++i)
vis[v[lin][i]|con]=;
}
return ;
}
dfs2(k+,res,con);
dfs2(k+,res-a[k],con|(<<k-));
dfs2(k+,res+a[k],con|(<<k-));
return ;
}
int main()
{
scanf("%d",&n);
for(rint i=;i<=n;++i)scanf("%d",&a[i]);
dfs1(,,);dfs2(n/+,,);
for(rint i=;i<=(<<n)-;++i)ans+=vis[i];
printf("%d\n",ans);
return ;
}
随机推荐
- 笔记62 Spring Boot快速入门(二)
SpringBoot部署 一.jar方式 1.首先安装maven. <1>下载最新的maven版本:https://maven.apache.org/download.cgi <2& ...
- Django之ModelForm操作
一.ModelForm的使用 顾名思义,ModelForm就是将Model与Form进行绑定,Form有自动生成表单的作用,但是每一个forms字段需要自己手动填写,而Model就是数据库表包含了所有 ...
- javascript表单验证的例子
function checkUsername(){ //对username的内容进行验证. //要求:首字符是字母或下划线,其他由下划线字母数字组成,共4-20位 var inputOb=docume ...
- NOIP模拟测试29(A)
T1: 题目大意:有一张有向无环图,第$x$次经过边$i$的代价为$a_ix+b_i$,最多经过$c_i$次,起点为1,$s$个点可作为终点,求走$k$次的最小代价. 我们新建一个汇点,将所有可做为终 ...
- CSP-S考前各种idea题解乱堆
快要考试了我还是这么菜. 已经没有心思维护我的博客了.开一篇博文吧.可能会记得很乱. 这也许是我OI生涯的最后一篇博文了?? 肯定很长很长. 不可能的.谁知道什么时候我心态恢复就把上面两句话删掉开始在 ...
- HDU 4279 Number 坑爹的迷之精度
题目描述 首先定义"special number": 如果对于一个数字B,存在一个数字A(0<A<=B),并同时满足 B%A=0 和 gcd(A,B) != 1 ,那么 ...
- Linux环境安装PHP链接SQLserver2008
网上很多介绍,但是跟着做总是有问题,找到一个大神的,没出现过问题: 1.首先需要编译安装FreeTDS 1.1.安装 说明:一定要从官网下载最新的版本FreeTDS-0.95 ftp://ftp.fr ...
- nginx,php-fpm性能优化
When you running a highload website with PHP-FPM via FastCGI, the following tips may be useful to yo ...
- Linux之nginx-uwagi-django 搭建
1. nginx 1) 使用官方Nginx yum源 [root@nginx ~]# vim /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo b ...
- C++——指针与引用
1.指针本身为对象,引用只是对象的别名.故有指针的引用,没有引用的引用,没有引用的指针.指针必须指向一个实际的对象.引用也必须是实际对象的别名. 2.允许指针赋值和拷贝,指针可指向不同的对象 3.指针 ...