atcoder ABC 358-C题详解

atcoder ABC 358-C题详解

Problem Statement

In AtCoder Land, there are N popcorn stands numbered 1 to N. They have M different flavors of popcorn, labeled 1,2,…,M, but not every stand sells all flavors of popcorn.

Takahashi has obtained information about which flavors of popcorn are sold at each stand. This information is represented by N strings S1,S2,…,SN of length M. If the j-th character of Si is o, it means that stand i sells flavor j of popcorn. If it is x, it means that stand i does not sell flavor j. Each stand sells at least one flavor of popcorn, and each flavor of popcorn is sold at least at one stand.

Takahashi wants to try all the flavors of popcorn but does not want to move around too much. Determine the minimum number of stands Takahashi needs to visit to buy all the flavors of popcorn.

Constraints

N and M are integers.
1≤N,M≤10
Each Si is a string of length M consisting of o and x.
For every i (1≤i≤N), there is at least one o in Si.
For every j (1≤j≤M), there is at least one i such that the j-th character of Si is o.

Input

The input is given from Standard Input in the following format:

N M
S1
S2

SN

Output

Print the minimum number of stands Takahashi needs to visit to buy all the flavors of popcorn.

Sample Input 1

3 5
oooxx
xooox
xxooo

Sample Output 1

2
By visiting the 1st and 3rd stands, you can buy all the flavors of popcorn. It is impossible to buy all the flavors from a single stand, so the answer is 2.

Sample Input 2

3 2
oo
ox
xo

Sample Output 2

1

Sample Input 3

8 6
xxoxxo
xxoxxx
xoxxxx
xxxoxx
xxoooo
xxxxox
xoxxox
oxoxxo

Sample Output 3

3

思路分析:

可以使用二进制,本题组合数为2的2次方,为加快速度可以用左移运算,基本思路已经在代码中注释出来了。

code:

#include <iostream>
#include <vector>
#include <bitset>
#include <string>
using namespace std;
int main(){int n,m;cin>>n>>m;//n小摊数量m爆米花口味的数量vector<string>s(n);//等价于char s[i][j];for(int i=0;i<n;i++){cin>>s[i];}vector<bitset<10>> b(n);//等价于bool b[12][10];bitset<10>是一个10位的bitset//bitset初始化的时候所有的值默认全是0for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(s[i][j]=='o') b[i][j]=1;}}int ans=n;for(int x=0;x<(1<<n);x++){//实现了对小摊所有组合的枚举//x用于枚举所有可能的组合//1<<n是将1左移动n位。数值上等于2的n次方//比如n=1,1的二进制是0001,将1左移一位就是0010是2//n=2,1的二进制是0001,将1左移二位就是0100是4//n=3,1的二进制是0001,将1左移三位就是1000是8bitset<10> bx(x);//等价于 当x=2时,bx[0]=0,bx[1]=1,bx[2]=0,bx[3]=0,bx[4]=0,bx[5]=0……//小摊的组合情况bitset<10> sb;//记录有没有每个味道都出现(等价于初始化了一个bool)for(int i=0;i<n;i++){//遍历每个小摊if(bx[i])//如果第i个小摊在当前枚举的组合x种sb=sb | b[i];//(等价于sb|=b[i];)那么我们直接把小摊b种所有的口味算进}if(sb.count()==m)ans=min(ans,(int)bx.count());}cout<<ans<<'\n';return 0;
}

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

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

相关文章

数字设计的秘密:原来有这么多创意玩法!

数字产品设计涵盖了各种学科和角色&#xff0c;但主要是人与数字设备或数字界面之间的互动。数字设计的两个主要部分是用户体验设计&#xff08;UX&#xff09;和用户界面设计&#xff08;UI&#xff09;。如果把数字产品的设计想象成人体&#xff0c;那么骨架就是代码&#xf…

从0-1搭建一个web项目vue3+vite+ts+element-plus(脚手架分析)

本章分析从0-1的搭建脚手架依赖 ObJack-Admin一款基于 Vue3.3、TypeScript、Vite3、Pinia、Element-Plus 开源的后台管理框架。在一定程度上节省您的开发效率。另外本项目还封装了一些常用组件、hooks、指令、动态路由、按钮级别权限控制等功能。感兴趣的小伙伴可以访问源码点个…

结构体(二)

今天来继续介绍我们有关结构体的相关知识 结构体的自引用 结构体的自引用&#xff0c;顾名思义嘛&#xff0c;就是在我们的结构体中再次引用该结构体&#xff0c;这一点跟我们的函数递归有异曲同工之妙&#xff0c;不了解函数递归的小伙伴可以移步到我之前做过的一期&#xf…

GPTCache:革新大模型缓存,降低成本,提升效率

GPTCache介绍 随着应用程序越来越受欢迎并遇到更高的流量水平,与 LLM API 调用相关的费用可能会变得相当可观。此外,LLM 服务的响应时间可能会很慢,尤其是在处理大量请求时。GPTCache是一个致力于构建用于存储 LLM 响应的语义缓存的项目。 项目架构 数字人助力传统客服 1…

效率神奇分享

嘿宝贝们&#xff01;&#x1f44b; 知道吗&#xff1f;工作效率高不高&#xff0c;其实跟你用的工具有很大关系哦&#xff01;今天小红书种草专家来给大家安利五款超实用的国产工作app&#xff0c;让你的工作生活轻松又高效&#xff01;&#x1f680; 1️⃣ 【亿可达】&#…

植物大战僵尸杂交版技巧大全(附下载攻略)

《植物大战僵尸杂交版》为策略游戏爱好者带来了全新的挑战和乐趣。如果你是新手玩家&#xff0c;可能会对游戏中的植物和僵尸感到困惑。以下是一些实用的技巧&#xff0c;帮助你快速掌握游戏并享受其中的乐趣。 技巧一&#xff1a;熟悉基本玩法 游戏的基本玩法与原版相似&…

Spring Boot中的零停机升级策略

Spring Boot中的零停机升级策略 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何在Spring Boot应用中实现零停机升级策略&#xff0c;确保在升…

【Android】多种方式实现截图(屏幕截图、View截图、长图)

目录 一、截图原理二、实现方式1. View截图2. WebView截图3. 屏幕截图 三、格式转换方法 一、截图原理 我们的手机一般同时按下音量-键和电源键就会将当前屏幕显示的内容截取下来&#xff0c;那里面具体经过哪些流程呢&#xff1f; Android中每一个页面都是一个Activity&#…

精通Vim替换艺术:深入探索替换模式的奥秘

&#x1f504; 精通Vim替换艺术&#xff1a;深入探索替换模式的奥秘 &#x1f3a8; Vim&#xff0c;这个源自伯克利的编辑器&#xff0c;以其强大的功能和灵活性在开发者和系统管理员中广受欢迎。在Vim中&#xff0c;替换模式是编辑文本时不可或缺的一部分&#xff0c;它允许我…

Java洗鞋小程序预约系统源码

&#x1f4a5;洗鞋神器来袭&#xff01;轻松预约&#xff0c;让你的鞋子焕然一新&#x1f45f; &#x1f389; 告别洗鞋烦恼&#xff0c;洗鞋预约小程序来啦&#xff01; 你是不是常常为洗鞋而烦恼&#xff1f;手洗太累&#xff0c;送去洗衣店又贵又麻烦。现在&#xff0c;好…

std::enable_if和std::is_base_of

std::enable_if,其主要为了完成模板特偏化&#xff0c;有两个参数&#xff0c;第一个为布尔值类型&#xff0c;第二个如果布尔值为true&#xff0c;其为默认空值&#xff0c;如果已经赋值&#xff0c;则为对应的类型。 std::is_base_of&#xff0c;其一共存在两个参数&#xff…

外汇的基本面分析需要关注什么?

外汇基本面分析的核心在于关注可能影响单一货币供求及国家货币价值的经济、社会和地缘政治事件与趋势。但值得注意的是&#xff0c;这些事件和因素往往具有更广泛的影响力&#xff0c;不仅限于单一国家。它们可能是影响整个地区或国家集团的重要事件&#xff0c;甚至一些事件&a…

使用docker搭建lnmp环境

近期闲来无事&#xff0c;用公司电脑部署了一套环境&#xff0c;记录一下部署经过和踩的坑。 Nginx 1、拉取镜像&#xff0c;需要使用镜像创建容器 拉取的Nginx版本可以自己设&#xff0c;我是用的nginx:latest // 拉取镜像 docker pull nginx:1.18.01.18.0: Pulling from …

差分数组与树上差分

假设我们现在需要维护一段区间&#xff0c;实现对一段区间[L,R]的数的加/减&#xff0c;以及对区间中某个数的查询 最简单的方法把这段区间的数都记录到数组a[N]中&#xff0c;每次修改都对区间[L,R]的每一个数进行加减操作&#xff0c;然后在查询第k个数的时候返回a[k] 在上…

数学建模 —— MATLAB中的矩阵(下)

目录 矩阵的拼接 矩阵的重复 矩阵的重构和重新排列 (1)reshape 函数 (2)sort 函数 (3)sortrows 函数 (4)flip / fliplr / flipud 函数 (5)rot90 函数 矩阵的拼接 有时候我们需要对多个矩阵进行拼接&#xff0c;变成一个大的矩阵。根据矩阵拼接的方向&#xff0c;我们可 …

C++性能优化篇:深拷贝、浅拷贝与移动构造

引言 最近在做性能优化&#xff0c;遇到了一个明显的性能问题&#xff0c;就是在大量数据做深拷贝的时候&#xff0c;程序耗时严重&#xff0c;几乎三分之一的时间都耗在了这里。于是乎仔细看了下此处的代码&#xff0c;发现这些深拷贝完全可以避免。 深拷贝、浅拷贝与移动构…

Java实现RS485串口通信

博客链接地址 近期&#xff0c;我接到了一个任务&#xff0c;将报警器接入到Java项目中&#xff0c;而接入的方式就是通过RS485接入&#xff0c;本人之前可以说是对此毫无所知。不过要感谢现在的互联网&#xff0c;通过网络我查到了我想要知道的一切&#xff0c;这里记录下本次…

对数据分析行业的疑问

我之前是做大数据的开发的&#xff0c;当然也做业务比如Java、springcloud的后端开发、也做了ai的。 但是我一直没怎么做数据分析&#xff0c;当我加入了新公司后发现&#xff0c;现在做大数据的大部分都是数据分析&#xff0c;用python和sql。 我今天一看他们的统计&#xf…

STM32音频应用开发:DMA与定时器的高效协作

摘要: 本文章将深入浅出地介绍如何使用STM32单片机实现音频播放功能。文章将从音频基础知识入手&#xff0c;逐步讲解音频解码、DAC转换、音频放大等关键环节&#xff0c;并结合STM32 HAL库给出具体的代码实现和电路设计方案。最后&#xff0c;我们将通过一个实例演示如何播放W…

NXP RT1060学习总结 - fsl_flexcan CAN FD 函数说明 -1

概要 CAN测试源码&#xff1a; https://download.csdn.net/download/qq_35671135/89425377 根据fsl_flexcan.h文件从文件末尾往前面梳理&#xff0c;总共CAN FD处理函数&#xff1b; 使用的是RT1064开发板进行测试。 1、中止中断驱动的消息接收进程(CAN FD) 函 数 &#xf…