Atcoder 356 C - Keys 二进制枚举

news2024/9/9 0:22:28

原题链接:

https://atcoder.jp/contests/abc356/tasks/abc356_c 


C - Keys:

问题陈述

您有 N 个编号为1,2,…,N 的密钥。
其中一些是真钥匙,其他都是假钥匙。

有一扇门,门 X,你可以插入任意数量的钥匙。只有插入至少 K 把真钥匙,X 门才会打开。

你已经对这些钥匙进行了 M 次测试。 i 次测试过程如下:

  • 您将 Ci 把 Ai,1​,Ai,2​,…,Ai,Ci​​ 把钥匙插入了 X 号门。
  • 测试结果用一个英文字母 RiRi​ 表示。
    • Ri​= o`表示在 i /-测试中门X打开了。
    • Ri​= x "表示在 i /-次测试中门X没有打开。

有 2^N 种可能的钥匙组合,其中哪些是真钥匙,哪些是假钥匙。在这些组合中,找出与任何测试结果都不矛盾的组合数。
给定的测试结果有可能是错误的,没有任何组合满足条件。在这种情况下,请报告 0 。

限制因素
  • N 、 M 、 K 、 Ci​ 和 Ai,j​ 是整数。
  • 1≤K≤N≤15
  • 1≤M≤100
  • 1≤Ci​≤N
  • 1≤Ai,j​≤N
  • Ai,j≠Ai,k,如果 j≠kj=k .
  • Ri​ 是 o 或 x

思路讲解:

 __builtin_popcount(s&S[i])>=K 记录了s,和S[i]的二进制表示中,相同位置都为1的位数,

 __builtin_popcount此函数用来统计,二进制表示当中1的个数
一共n把钥匙,每种钥匙都有2种情况,真和假,因此,一共就有2的n次幂种可能,我们枚举每一种情况,看看有多少种情况是符合题干的即可、如果全为假,即为000,如果全为真表示为111,是2的n次幂-1,故数字枚举0到2的n次幂-1,要求如果有>=k把钥匙和能开门这两个条件是要同时成立的,否则这个方案就不是一个合理的方案



代码实现:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<vector>

using namespace std;

typedef long long ll;

int main()
{
    int N,M,K;
    cin>>N>>M>>K;
    vector<int> S(M),R(M);
    for(int i=0;i<M;i++)
    {
        int C; cin>>C;
        for(int j=0;j<C;j++)
        {
            int x; cin>>x;
            x--;
            S[i]|=1<<x;//作用是将S[i]的第x位设为1,因为二进制是从第0位开始的,因此我们需要x--;
        }
        char r; cin>>r;
        R[i]=(r=='o'); //如果这种情况下是可以打开的,则R[i]=1;
    }
    int ans=0;
    for(int s=0;s<(1<<N);s++) //枚举2的n次幂种可能
    {
        int ok=1;
        for(int i=0;i<M;i++)
        {
            if( (__builtin_popcount(s&S[i])>=K) != R[i]) //若两者不是同时成立的,则代表出现了矛盾,则这种方案不满足
            {
                ok=0;
            }
        }
        ans+=ok;
    }
    cout<<ans<<endl;
    return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1958286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

秒懂C++之vector(上)

目录 一.vector定义 二.vector常用接口 2.1 vector iterator迭代器 2.2 reserve 扩容 2.3 insert 插入 三.对象数组 3.1 例题 3.2 小拓展 一.vector定义 vector本质就是一个顺序表 #include <iostream> #include <vector> using namespace std;void func(ve…

分布式:RocketMQ/Kafka总结(附下载链接)

文章目录 下载链接思维导图 本文总结的是关于消息队列的常见知识总结。消息队列和分布式系统息息相关&#xff0c;因此这里就将消息队列放到分布式中一并进行处理关联 下载链接 链接: https://pan.baidu.com/s/1hRTh7rSesikisgRUO2GBpA?pwdutgp 提取码: utgp 思维导图

大模型微调:参数高效微调(PEFT)方法总结

PEFT (Parameter-Efficient Fine-Tuning) 参数高效微调是一种针对大模型微调的技术&#xff0c;旨在减少微调过程中需要调整的参数量&#xff0c;同时保持或提高模型的性能。 以LORA、Adapter Tuning 和 Prompt Tuning 为主的PEFT方法总结如下 LORA 论文题目&#xff1a;LORA:…

TikTok达人合作:AI与大数据如何提升跨境电商营销效果

在当今数字时代&#xff0c;跨境电商与TikTok达人的合作已成为推动品牌增长和市场拓展的重要力量。随着AI、大数据等先进技术的不断发展和应用&#xff0c;这种合作模式正变得更加高效和精准。本文Nox聚星将和大家探讨在TikTok达人合作中&#xff0c;AI、大数据等技术的具体运用…

PyTorch 的 .pt 文件是什么?以及都能存储什么样的数据格式和复合数据格式?加载 train.pt 文件的一个代码示例

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、PyTorch 的 .pt 文件是什么&#xff1f; .pt 文件的基本概念&#xff1a; .pt 文件是 PyTorch 中特有的一种文件格式&#xff0c;用于保存和加载各类数据。.pt为 PyTorch 的缩写。此文件格式极其灵…

Linux快速安装Jenkins一键部署Maven项目

目录 一、序言二、安装前置准备1、JDK版本要求2、Maven安装3、Git安装 三、Jenkins安装1、Jenkins war包下载2、启动Jenkins3、初始化Jenkins4、Jenkins全局设置 四、Maven项目自动化jar部署项目配置1、创建Maven风格的项目2、丢弃旧的构建3、源码管理配置4、构建配置5、构建后…

华为od 100问 持续分享10-华为OD的面试流程细说

我是一名软件开发培训机构老师&#xff0c;我的学生已经有上百人通过了华为OD机试&#xff0c;学生们每次考完试&#xff0c;会把题目拿出来一起交流分享。 重要&#xff1a;2024年5月份开始&#xff0c;考的都是OD统一考试&#xff08;D卷&#xff09;&#xff0c;题库已经整…

带有扰动观测器的MPC电机控制

模型预测控制(Model Predictive Contro1, MPC)是一种先进的控制策略&#xff0c;虽然具有鲁棒性、建模简单、处理多变量系统、显示约束、预测未来行为和优化性能的能力等优势。它的不足在于预测控制行为的计算需要繁琐的计算量&#xff0c;以及抗干扰能力较弱。这里提出基于扰动…

34 列表常用方法——copy()

列表对象的 copy() 方法返回列表的浅复制。 浅复制&#xff0c;是指生成一个新的列表&#xff0c;并且把原列表中所有元素的引用都都复制到新列表中。 如果原列表中只包含整数、实数、复数等基本类型或元组、字符串这样的不可变类型的数据&#xff0c;一般是没有问题的。但是&a…

黛米·摩尔和她的孙女卢埃塔在这张飘逸的快照很亲密

卢埃塔和她的祖母黛米摩尔显然是最好的朋友&#xff0c;这张飘逸的快照证明了这一点。准备好“哇&#xff01;” 7 月 26 日&#xff0c;摩尔分享了一张非常迷人的照片&#xff0c;照片上有她、她的两个女儿和她的孙女在她昂贵的后院。她在照片中配文说&#xff1a;“夏日&…

SX_初识GitLab_1

1、对GitLab的理解&#xff1a; 目前对GitLab的理解是其本质是一个远程代码托管平台&#xff0c;上面托管多个项目&#xff0c;每个项目都有一个master主分支和若干其他分支&#xff0c;远程代码能下载到本机&#xff0c;本机代码也能上传到远程平台 1.分支的作用&#xff1a…

Home Assistant ESPHome 第一次烧录ESP8266设备记录日志

流程简介 windows PC->usb 数据线->板载usb-ttl->esp8266 connect 编译固件 下载固件 esp web tools 写入固件 编译固件 go esphome add on 1.创建设备 选择ESP8266 2.编写.yaml配置, 3.编译-输出bin 烧录 4.烧录 打开 Web-ESPHome 5.查看日志 查看手机wif…

如何让企业在获客上拥有竞争力?云微客打造流量爆款

做了这么久的短视频&#xff0c;还是没有客户&#xff0c;如果你还在单一账号上死磕&#xff0c;那么就别做爆款的白日梦了&#xff01;因为你的做法是干不过同行的&#xff0c;同行可能早就开通上百个账号在互联网上抢流量了。 想获客只用一个云微客AI矩阵系统&#xff0c;不用…

科普文:深入理解ElasticSearch体系结构

概叙 Elasticsearch是什么&#xff1f; Elasticsearch&#xff08;简称ES&#xff09;是一个分布式、可扩展、实时的搜索与数据分析引擎。ES不仅仅只是全文搜索&#xff0c;还支持结构化搜索、数据分析、复杂的语言处理、地理位置和对象间关联关系等。 官网地址&#xff1a;…

实习日志2之windows上大模型(qwen2-7b)部署

一、模型部署 1、下载ollama(大模型本地部署工具)&#xff0c;并安装 下载网址&#xff1a;https://ollama.com/ ollama是大模型部署方案&#xff0c;对应docker&#xff0c;本质也是基于docker的容器化技术。 2、下载大模型 在命令框&#xff0c;如windows系统在cmd窗口输…

汽车、能源、烟草、电力行业洞见:TDengine 用户大会亮点荟萃

近年来&#xff0c;随着物联网、车联网、工业互联网等前沿技术的迅猛发展&#xff0c;全球数据量呈指数级增长。作为大数据的一个重要组成部分&#xff0c;时序数据因其在实时监控、预测分析和智能决策中的独特优势&#xff0c;正逐步成为数字化转型的关键要素。尤其在 AI 时代…

如何使用Firefox浏览器连接IPXProxy设置海外代理IP教程

​Firefox浏览器是大家上网时经常会使用的一款工具。不过&#xff0c;有时候我们会遇到一些网站无法直接访问的情况。这时候&#xff0c;通过海外代理IP&#xff0c;比如像IPXProxy代理这样的服务&#xff0c;可能就能帮助我们进入那些受限制的网站&#xff0c;获取我们所需的资…

如何通过 CloudCanal 实现从 Kafka 到 AutoMQ 的数据迁移

01 引言 随着大数据技术的飞速发展&#xff0c;Apache Kafka 作为一种高吞吐量、低延迟的分布式消息系统&#xff0c;已经成为企业实时数据处理的核心组件。然而&#xff0c;随着业务的扩展和技术的发展&#xff0c;企业面临着不断增加的存储成本和运维复杂性问题。为了更好地…

Discourse 如何通过终端工具访问 PGSQL

PGSQL 在 Discourse 中是通过容器方式运行的&#xff0c;要访问 PGSQL 中的数据那么首先需要进入到容器后才可以。 进入容器的命令为&#xff1a; cd /var/discourse/./launcher enter appsu discoursepsql discourse最后的命令是登录到运行在容器中的 pgsql。 查看 pgsql 上…

CTFshow--Web--代码审计

目录 web301 web302 web303 web304 web305 web306 web307 web308 web309 web310 web301 开始一个登录框, 下意识sql尝试一下 发现 1 的时候会到一个 checklogin.php 的路径下, 但啥也没有 好吧, 这是要审计代码的 ,下载好源码, 开始审计 看了一下源码 , 应该就是sql…