考试的时候居然睡着了。。。

 T1的60分做法很明显,3^n枚举每个状态并进行验证

(考试剩十分钟结束的时候我开始打,,不到五分钟就写完了?

暴力(60分)

#include<bits/stdc++.h>
#define int long long
#define re register
#define ll long long
#define inc(i,j,k) for(re int i=j;i<=k;++i)
#define dec(i,j,k) for(re int i=j;i>=k;--i)
using namespace std;
const int maxn=;
int n,bit[maxn],anss;
ll x;
inline ll lowbit(ll t) {return (t&(-t));}
inline int count(ll w)
{
int tt=;
while(w)
{
w-=lowbit(w);
tt++;
}
return tt;
}
int p[maxn][];
inline void dfs(int dep,ll sum)
{
if(sum>x) return;
if(dep==n)
{
if(sum==x) anss++;
return;
}
dfs(dep+,sum+p[dep+][]);
dfs(dep+,sum+p[dep+][]);
dfs(dep+,sum+p[dep+][]);
}
signed main()
{
// freopen("123123.in","r",stdin);
scanf("%lld%lld",&n,&x);
bit[]=; bit[]=;
inc(i,,) bit[i]=bit[i-]<<;
inc(i,,n)
{
scanf("%lld",&p[i][]);
p[i][]=bit[count(p[i][])];
p[i][]=;
}
dfs(,);
cout<<anss<<endl;
}

然后说一下正解吧。

既然搜索能够拿到这么高的分数,观察到100%的数据与暴搜数据范围差距不大

考虑对搜索进行优化 (显然 meet-in-the-middle) (俺英语差 别D我)

emm就没了,从状态一暴搜一半 ,从状态n暴搜一半,这样可以大大减小搜索树的大小(减小最少一半吧)

这道题毒瘤出题人竟然放了个n=1的点

真是苟啊..

ACcode:

#include<bits/stdc++.h>
#define int long long
#define re register
#define ll long long
#define inc(i,j,k) for(re int i=j;i<=k;++i)
#define dec(i,j,k) for(re int i=j;i>=k;--i)
using namespace std;
const int maxn=30;
int n,bit[maxn],anss;
ll x;
inline ll lowbit(ll t) {return (t&(-t));}
inline int count(ll w)
{
int tt=0;
while(w)
{
w-=lowbit(w);
tt++;
}
return tt;
}
int p[maxn][4],pp[maxn][4];
map<int,int> cnt1,cnt2;
map<int,int>::iterator it;
inline void dfs1(int dep,ll sum)
{
if(dep==n/2+1)
{
cnt1[sum]++;
return;
}
dfs1(dep+1,sum+p[dep][1]);
dfs1(dep+1,sum+p[dep][2]);
dfs1(dep+1,sum+p[dep][3]);
}
inline void dfs2(int dep,ll sum)
{
if(dep==(n-n/2+1))
{
cnt2[sum]++;
return;
}
dfs2(dep+1,sum+pp[dep][1]);
dfs2(dep+1,sum+pp[dep][2]);
dfs2(dep+1,sum+pp[dep][3]);
}
inline void dfs(int dep,ll sum)
{
if(sum>x) return;
if(dep==n)
{
if(sum==x) anss++;
return;
}
dfs(dep+1,sum+p[dep+1][1]);
dfs(dep+1,sum+p[dep+1][2]);
dfs(dep+1,sum+p[dep+1][3]);
}
signed main()
{
// freopen("123123.in","r",stdin);
scanf("%lld%lld",&n,&x);
if(n==1)
{
bit[0]=0; bit[1]=2;
inc(i,2,27) bit[i]=bit[i-1]<<1;
inc(i,1,n)
{
scanf("%lld",&p[i][1]);
p[i][2]=bit[count(p[i][1])];
p[i][3]=0;
}
dfs(0,0);
cout<<anss<<endl;
return 0;
}
bit[0]=0; bit[1]=2;
inc(i,2,27) bit[i]=bit[i-1]<<1;
inc(i,1,n/2)
{
scanf("%lld",&p[i][1]);
p[i][2]=bit[count(p[i][1])];
p[i][3]=0;
}
inc(i,1,n-n/2)
{
scanf("%lld",&pp[i][1]);
pp[i][2]=bit[count(pp[i][1])];
pp[i][3]=0;
}
dfs1(1,0);
dfs2(1,0);
anss=0;
for(it=cnt2.begin();it!=cnt2.end();it++)
{
ll aa=it->first,bb=it->second;
anss+=bb*cnt1[x-aa];
}
cout<<anss;
}

((      /|_/|
  \\.._.'  , ,\
  /\ | '.__ v /
 (_ .   /   "         
  ) _)._  _ /
 '.\ \|( / (
   '' ''\\ \\

HeRaNO's NOIP CSP Round Day 2 T1 building的更多相关文章

  1. HeRaNO's NOIP CSP Round Day 2 T3 ginkgo

    睡醒后我第一眼:这不主席树裸题吗? 先统计dfs序,把树上问题转化为区间问题 区间大于等于某个数的个数...主席树模板? #include<bits/stdc++.h> #define r ...

  2. HeRaNO's NOIP CSP Round Day 2 T2 PESTC

    对于我这种菜鸡来说还是挺有迷惑性的. 在考场发现答案问的是跟最值有关的数量,想到二分,结果果然具有单调性,考虑二份答案+验证 其实什么反转什么的,可以不用去管他,对于长度小于二分答案mid的道路,不去 ...

  3. NOIP&CSP PJ 难度刷题记录

    前言 本来不想写前言的(>人<:) 这只是 mjl 给我们布置的作业,并不是我自己在刷题! 不保证所有代码的正确性,它们仅仅是通过了所有数据点而已. 1.模拟板块 整体难度:红~黄(模拟不 ...

  4. NOIP&CSP 考前 Dev-cpp 的选项问题和考试心态

    (进入考场后您将获得一个崭新的 \(Dev-cpp\),没有中文,没有编译选项,没有缺省源:我还将获得一个崭新的脑子,没有心态,没有智商,没有调试能力--) 中文 \[Step1 \] \[Step2 ...

  5. 【数论+技巧】神奇的Noip模拟试题第二试 T1 素数统计

    1.      素数统计 (pcount.pas/.c/.cpp) [问题描述] 小tan的老师揣谙戈给同学们布置了一道题,要求统计给定区间内素数的个数.“这不是很简单吗?”小tan忍不住说.揣谙戈冷 ...

  6. NOIP模拟赛(by hzwer) T1 小奇挖矿

    [题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值 w)的飞船,按既定 路线依次飞过喵星系的 n 个星球. [问题描述] 星球分为 2 类:资源型和维修型. 1. 资源型:含矿物质量 ...

  7. 括号树 noip(csp??) 2019 洛谷 P5658

    洛谷AC通道 本题,题目长,但是实际想起来十分简单. 首先,对于树上的每一个后括号,我们很容易知道,他的贡献值等于上一个后括号的贡献值 + 1.(当然,前提是要有人跟他匹配,毕竟题目中要求了,是不同的 ...

  8. [Noip 2018][标题统计 龙湖斗 摆渡车 对称二叉树]普及组题解

    啊喂,都已经9102年了,你还在想去年? 这里是一个Noip2018年PJ第二题打爆的OIer,错失省一 但经过了一年,我学到了很多,也有了很多朋友,水平也提高了很多,现在回看当时: 今年的Noip ...

  9. NOIP 2014 pj & tg

    由于我太弱,去了pj组= = ============================== T1: 傻逼暴力 T2: 傻逼暴力+判断+更新 T3: 手画一下就知道了.算出这个点在第几圈,再使劲yy下在 ...

随机推荐

  1. 团队第五次作业:alpha2成绩汇总

    一.作业题目 团队第五次作业:alpha2发布 二.作业评分标准 博客评分规则(总分100)博客要求 给出开头和团队成员列表(10') 给出发布地址以及安装手册(20') 给出测试报告(40') 给出 ...

  2. tf.gather_nd()

    tf.gather_nd( params, indices, name=None, batch_dims=0) TensorFlow链接:https://tensorflow.google.cn/ap ...

  3. xdvipdfmx:fatal: Unable to open "xxx.pdf". Output file removed. fwrite: Broken pipe xelatex.exe

    解决方法: 关闭外部PDF阅读器,重新编译运行下就好了. 参考:https://github.com/James-Yu/Atom-LaTeX/issues/109

  4. vue-router路由嵌套与二级路由重定向

    (1)公共路由裁减 不是每个页面都存在导航,所以不要把导航组件在根组件APP.vue里引入,哪个页面需要,在哪里引入即可. 方案: 哪个页面需要,在哪个页面引入即可 (2)嵌套路由 注意:childr ...

  5. JMeter5.1开发http协议接口之json

    信息头指定是json 传json 包含传token,请参考:https://www.cnblogs.com/uncleyong/p/11668665.html

  6. 16-C#笔记-枚举

    枚举同C++ using System; namespace EnumApplication { class EnumProgram { enum Days { Sun, Mon, tue, Wed, ...

  7. 使用 Docker-Compose 编排容器

    我们知道使用一个 Dockerfile 模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排.服务编排有很多种技术方案,今天给大家介绍 Docker 官方产品 Docker Comp ...

  8. first-child、last-child误解

    MDN解释兄弟元素中的第一个元素 然后今天写的时候这样想出现了问题 并没有加上边框 W3C解释 尝试去掉h3,发现span加上了边框 E:first-child含义 父元素中第一个元素且第一个元素是E ...

  9. K8s中的网络

    Kubernetes的网络通信问题: 1. 容器间通信: 即同一个Pod内多个容器间通信,通常使用loopback来实现. 2. Pod间通信: K8s要求,Pod和Pod之间通信必须使用Pod-IP ...

  10. 从最近的比赛学习CTR/CVR

    https://zhuanlan.zhihu.com/p/35046241 包大人 深度学习炼丹劝退师 278 人赞同了该文章 从最近的比赛学习CTR/CVR 最近在玩kaggle的talking d ...