题目简述:

共有n个动物,m条要求,每条要求描述了第x位上是1的话,必须购买y饲料,动物园里已有的动物必须的饲料已经购买了,问题是:在不要求增加购买饲料的基础上,还能放进去多少种动物?共有k个二进制,数据保证输入的动物编号各不相同,给出的饲料种类各不相同,n和m的范围都是100万,饲料的范围是1亿,k的范围是64(k表示有多少个二进制)

题解:

1、暴力:

枚举动物,枚举m条要求,如果ai&&1<<xi==1的话,说明动物编号中满足这一条要求,b[i]=true;

暴力枚举i,范围在1<<k-1,枚举m条要求,如果b[j]==false,但是i&&1<<xi==true,则这个不满足

最终满足的是2的k次方减去n减去不满足要求的

2、正解

如果能找到有多少个位置符合要求,那么这些位置无论是0还是1都可以,1表示有这种饲料,0表示没这种饲料也行,最后符合要求的动物数量为1<<cnt个,去掉动物园的n个,就是  最后的答案。这里面有个重要的条件是饲料各不相同,也就是说不可能不同的二进制位对应相同的饲料,如果是这样的话,可能比较难处理,但是这里去掉了这个条件

我们可以把所有的动物编号都或起来,或之后的值为F,之后枚举m个要求,如果F|(1<<xi)!=F,那么说明这一个二进制没有,k--,同时设置这个值被访问过

最后,k表示哪些位置合法

3、改进

当然,如果这道题修改一下,不同的二进制位置可以对应相同的饲料,这样的话,此题的解法就完全不同,举个例子,1 4 5三个动物编号,0和2的二进制位有值,如果1和2都对应相同的饲料,那么其实相当于1也是合法的位置,这里就需要特殊的处理,杨宸骁的代码适合这种情况

这里,附上他的代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,c,k,x[1000005],y[1000005],lsh[1000005],cnt;
unsigned long long xx;
bool f[1000005],flag[1000005],ff[1000005],fff[1000005];
int main(){
// freopen("zoo.in","r",stdin);
// freopen("zoo.out","w",stdout);
cin>>n>>m>>c>>k;
if(n==0&&k==64){
cout<<"18446744073709551616";
return 0;
}
for(int i=1;i<=n;i++){
cin>>xx;
int j=1;
while(xx){
if(xx&1)f[j-1]=true;
xx/=2;
j++;
}
}
for(int i=1;i<=m;i++){
cin>>x[i]>>y[i];
lsh[i]=y[i];
}
sort(lsh+1,lsh+m+1);
int tot=unique(lsh+1,lsh+m+1)-lsh-1;
for(int i=1;i<=m;i++){
y[i]=lower_bound(lsh+1,lsh+tot+1,y[i])-lsh;
fff[x[i]]=true;
if(f[x[i]]==true)flag[y[i]]=true;
}
for(int i=1;i<=m;i++){
if(flag[y[i]]==true)ff[x[i]]=true;
}
for(int j=0;j<=k-1;j++){
if(ff[j]||!fff[j])cnt++;
}
cout<<(1ull<<cnt)-n<<endl;
return 0;
}

csp-s2020 T2 动物园的更多相关文章

  1. 「考试」CSP-S 2020

    乱扯 爆炸的过程是这样的 写了\(2.5h\)的\(T1\)过不去大样例,自闭了 决定调\(T2\)然后过了样例但事实上写的完全是假的 这个时候突然\(T1\)灵光一闪就没再看\(T2\)了 然后就一 ...

  2. 2019.10.29 CSP%您赛第四场t2

    我太菜了我竟然不会分层图最短路 ____________________________________________________________________________________ ...

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

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

  4. UOJ #5. 【NOI2014】动物园 扩大KMP

    第一次NOI称号. ... 扩展假设知道KMP如果. .. . 就是水题了. ... #5. [NOI2014]动物园 统计提交情况 描写叙述 提交 近日.园长发现动物园中好吃懒做的动物越来越多了.比 ...

  5. CSP 2019 游记

    Day -32 开坑. 没什么好说的,等个 5 天等初赛(应该叫第一轮认证)挂掉之后就能弃坑了. 今天开始停课,虽然每天只停半天,但是感觉还是特别的舒服~ 然而得等初赛过了才能全天停课-- 没关系,熬 ...

  6. 【CSP游记S】

    简略:初三小蒟蒻本想体验一下提高,结果尝到了省选的滋味.fclose没有打,目前不知道会不会有影响,很伤心. day 1 大早上的6:30起床天好黑啊~,想起这次没有面包吃,到华生园买了包熊博士(毕竟 ...

  7. [bzoj1151][CTSC2007]动物园zoo_状压dp

    动物园zoo 题目大意:https://www.lydsy.com/JudgeOnline/problem.php?id=1151 题解: 我们发现每个点只会往右延伸$5$个,这个数非常小. 再加上每 ...

  8. 第十八次CSP认证游记 | 2019.12.15

    CSP认证的考试是Haogod介绍的,取得一定成绩之后能有机会参加CCSP的分赛区和全国决赛.这次来参加认证要感谢老师的奔走为我们申请学校的报销,虽然最终因为这不是比赛所以报名费和差旅费下不来,但是老 ...

  9. 「CSP」第一届提高组考后总结

    「CSP」第一届提高组考后总结 问题分析+反思 成绩 心态 考前心态 考时心态 考后心态 方法 心灵鸡汤... 在学习了三年之后,我们信竞迎来了初中最后一次大考,也是第一次 CSPCSPCSP 考试. ...

  10. 2020 CSP&NOIP 游记

    CSP初赛 CSP初赛 Day -1 早上打了模拟赛,T2寒假正好做过,然而还是还是被踩Orz,郑外NB!.中午出校吃了大盘鸡和拉面,还带回来了三瓶可乐. 初赛知识点看了两页不(看)想(不)看(懂)了 ...

随机推荐

  1. VUE项目Webpack3升级为webpack4总结

    前言: 2018年8月25号webpack4正式发布,webpack4引入了零配置的概念(实际配置下来还是要写不少配置),官方宣传能够提升构建速度 webpack3转webpack4官方说明: htt ...

  2. 《话糙理不糙》之如何在学习openfoam时避免坑蒙拐骗

    今天开启一个单独的系列 <话糙理不糙> - 谁要和你说学openfoamC++基础不重要,那就是放氨气,非常误人 这就好比没读过外国文献的人和你说不需要学专业英语一样 谜底就在谜面里,程序 ...

  3. k8s(docker-desktop)简单搭建zookeeper三节点集群

    前提 已经安装了docker-desktop,并且其中的kubernetes启动运行的.或者安装了k8s环境就行 可以正常下载dockerhub的镜像,这里采用了dockerhub官方制作的镜像 启动 ...

  4. 【4】Postman之Tests(断言)

    简介:使用postman完成请求后,验证返回结果,会用到tests断言.官方提供了很多可以直接使用的方法~ 接下来主要介绍这些方法是如何使用. 1. 变量相关: Get an environment ...

  5. Head First Python(第2版)书籍 重视大脑的学习指南

    Head First Python(第2版)PDF高清版书籍免费下载地址 提取码:08eo 内容简介  · · · · · · 你想过可以通过一本书就学会Python吗?<Head First ...

  6. 四大组件之内容提容者ContentProvider

    参考:Android开发基础之内容提容者ContentProvider Android四大组件 内容提供者是四大组件之一,还记得Android的四大组件吗? 前面我们学习了三大组件了,对吧! 其中有: ...

  7. 迁移virtualenv虚拟环境,复制,免安装

    前提:在原来的服务器中使用相同的python版本,并使用virtualenv创建了自己的虚拟环境. 1.首先在新的机器上安装virtualenv(要有和原机器相同版本的python解释器,第5步也很相 ...

  8. 代码随想录 day0 博客怎么写

    前言 2.25日开始记录自己的博客生涯以及代码随想录训练营的每日内容 一.题目链接怎么找?怎么设置连接? 力扣题目链接1:力扣 二.正文怎么写? 二分查找 算法思路: 二分查找需要保证数组为有序数组同 ...

  9. Oracle —— 对表数据操作的各种小Tip

    1.清空某表数据 TRUNCATE TABLE schema_name.table_name 例如:在名为test的schema下,有一张名为user的表,故此,可用TRUNCATE TABLE te ...

  10. kubernetes构架及组件介绍

    传统部署时代 早期在物理机上直接运行应用程序,无法对其定义资源边界,导致资源不分配,其他的程序性能下降 虚拟化部署时代 虚拟化允许应用程序在VM之间隔离,并提供安全界别,但是不能自由访问应用程序 因为 ...