HeRaNO's NOIP CSP Round Day 2 T1 building


考试的时候居然睡着了。。。
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的更多相关文章
- HeRaNO's NOIP CSP Round Day 2 T3 ginkgo
睡醒后我第一眼:这不主席树裸题吗? 先统计dfs序,把树上问题转化为区间问题 区间大于等于某个数的个数...主席树模板? #include<bits/stdc++.h> #define r ...
- HeRaNO's NOIP CSP Round Day 2 T2 PESTC
对于我这种菜鸡来说还是挺有迷惑性的. 在考场发现答案问的是跟最值有关的数量,想到二分,结果果然具有单调性,考虑二份答案+验证 其实什么反转什么的,可以不用去管他,对于长度小于二分答案mid的道路,不去 ...
- NOIP&CSP PJ 难度刷题记录
前言 本来不想写前言的(>人<:) 这只是 mjl 给我们布置的作业,并不是我自己在刷题! 不保证所有代码的正确性,它们仅仅是通过了所有数据点而已. 1.模拟板块 整体难度:红~黄(模拟不 ...
- NOIP&CSP 考前 Dev-cpp 的选项问题和考试心态
(进入考场后您将获得一个崭新的 \(Dev-cpp\),没有中文,没有编译选项,没有缺省源:我还将获得一个崭新的脑子,没有心态,没有智商,没有调试能力--) 中文 \[Step1 \] \[Step2 ...
- 【数论+技巧】神奇的Noip模拟试题第二试 T1 素数统计
1. 素数统计 (pcount.pas/.c/.cpp) [问题描述] 小tan的老师揣谙戈给同学们布置了一道题,要求统计给定区间内素数的个数.“这不是很简单吗?”小tan忍不住说.揣谙戈冷 ...
- NOIP模拟赛(by hzwer) T1 小奇挖矿
[题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值 w)的飞船,按既定 路线依次飞过喵星系的 n 个星球. [问题描述] 星球分为 2 类:资源型和维修型. 1. 资源型:含矿物质量 ...
- 括号树 noip(csp??) 2019 洛谷 P5658
洛谷AC通道 本题,题目长,但是实际想起来十分简单. 首先,对于树上的每一个后括号,我们很容易知道,他的贡献值等于上一个后括号的贡献值 + 1.(当然,前提是要有人跟他匹配,毕竟题目中要求了,是不同的 ...
- [Noip 2018][标题统计 龙湖斗 摆渡车 对称二叉树]普及组题解
啊喂,都已经9102年了,你还在想去年? 这里是一个Noip2018年PJ第二题打爆的OIer,错失省一 但经过了一年,我学到了很多,也有了很多朋友,水平也提高了很多,现在回看当时: 今年的Noip ...
- NOIP 2014 pj & tg
由于我太弱,去了pj组= = ============================== T1: 傻逼暴力 T2: 傻逼暴力+判断+更新 T3: 手画一下就知道了.算出这个点在第几圈,再使劲yy下在 ...
随机推荐
- python 和 R 语言 中的 range() 函数
1.python 中的 range() 函数生成整数序列,常用于 for 循环的迭代. 示例: 2.R 语言中的 range() 函数返回一个数值向量中的最小值和最大中,常用于求极差. 示例: 按语: ...
- bootstrap的selectpicker的方法
方法 .selectpicker('val') 您可以通过调用val元素上的方法来设置所选值. 1 2 $('.selectpicker').selectpicker('val', 'Mustard' ...
- node-gyp 在此解决方案中一次生成一个项目。若要启用并行生成,请添加“/m”开关。
在此解决方案中一次生成一个项目.若要启用并行生成,请添加“/m”开关. MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”.要解决此问题, ...
- HS编码查询hs海关编码列表
HS编码查询是外面人一个必须技能,以下是ytkah整理的hs海关编码列表,罗列了几乎所有的hs商品编码,方便大家查询,也欢迎大家转给有需要的朋友! 编号 名称 01022100 荷斯坦青年牛 0103 ...
- 解决tomcat出现乱码问题---韦大仙
1. 改这两个文件 URIEncoding="UTF-8" 2.然后重启idea
- react使用ant design pro时的滑动图片组件
react的滑动图片验证,是基于https://segmentfault.com/a/1190000018309458?utm_source=tag-newest做的修改,改动的主要有以下几点: 1. ...
- Python面向对象 | 双下方法
定义:双下方法是特殊方法,他是解释器提供的.由双下划线+方法名+双下划线 .它具有特殊意义的方法,双下方法主要是python源码程序员使用的,我们在开发中尽量不要使用双下方法,但是深入研究双下方法,更 ...
- 剑指offer15 二进制中1的个数
题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如,把9表示成二进制是1001,有2位是1.因此,如果输入9则函数输出2. int Number(int n) { ; while ...
- 三天精通Vue教程
在这里更新作为后端工程师想要快速掌握Vue需要看的重点内容,三天精通教程,加油! 学前摘要 ES6的常用语法 Vue的常用语法
- SpringMVC之使用ResponseEntity
1.Post请求 一般情况下,在非必须的情况下,使用Jquery实现post请求,而后台返回一般都需要手动封装ResponseUtil,和使用@ResponseBody注解来实现返回.然而我们书上学到 ...