【牛客小白月赛23 A】膜法记录 (二进制枚举)

2024-02-24 03:20

本文主要是介绍【牛客小白月赛23 A】膜法记录 (二进制枚举),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【题目传送门】

题目描述:

牛牛最近在玩一款叫做《膜法记录》的游戏,这个游戏的机制是这样的: 在一局游戏中,所有的敌人都排布在一个 n{n}n 行 m{m}m 列的网格中,牛牛指挥着他的魔法少女对敌人进行攻击。 攻击有两种类型:行blast,列blast 行blast能消灭一整行的敌人,列blast能消灭一整列的敌人 牛牛总共能够释放 a{a}a 次行blast,b{b}b 次列blast 给定某局游戏的初始局面,请问牛牛能否将敌人全歼?

输入描述:

第一行包含一个正整数T,表示测试数据组数,接下来是T组测试数据每组测试数据的第一行有四个正整数 n,m,a,b接下来有n{n}n行,每行是一个长度为m的字符串,第i行第j列的字符如果是 * 则说明这里有一个敌人,如果是 . 说明这里没有

输出描述:

对每组测试数据输出一行,如果能消灭所有的敌人,就输出yes,否则输出no

说明

第一个样例,我可以在第一行放一个行blast,然后前两列都放一个列blast,就把敌人给全歼了。第二个样例,我不管怎么安排攻击策略,都没法全歼敌人

备注:

在这里插入图片描述

分析:

这道题的n很小,只有20,我们可以利用二进制数来枚举可操作的行,我们可以认为1是对行操作,0是不操作;比如n=4时,若对3,4行操作对应的二进制数表示为1100。
由此我们对 0到2^n-1 (0表示都不操作,2^n-1表示的二进制数每一位都为1,即表示对n行都操作)范围内的数进行遍历,即枚举各种可操作行的组合
然后再对整个矩阵进行遍历,选出来没有被行操作过得敌人,让列进行操作,如果 列操作 的次数小于题目中给定的次数,即满足,反之不满足。

代码如下:

#include <bits/stdc++.h>
using namespace std;
const int N=1e6+100;
string s[N];//字符串数组
int main() {int n,m,a,b,t;int flag;cin>>t;while(t--){flag=0;cin>>n>>m>>a>>b;for(int i=0;i<n;i++) cin>>s[i];for(int i=0;i<(1<<n);i++)//枚举0-2^n-1范围内的数,即枚举各种组合;{int x=0;for(int j=0;j<n;j++)if((i>>j)&1) x++;//判断有几个位有1,即对 几行 操作if(x!=a) continue;int y=0;for(int j=0;j<m;j++)for(int k=0;k<n;k++)if(s[k][j]=='*'&&!((i>>k)&1))//判断一下这个行有没有操作过,如果行操作过,就不用列操作了{y++;break;//这一列消灭完了,就跳出这一列到下一列;}if(y<=b) flag=1;}if(flag) cout<<"yes"<<endl;else cout<<"no"<<endl;}return 0;
}

six day~

这篇关于【牛客小白月赛23 A】膜法记录 (二进制枚举)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/740802

相关文章

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

C#实现获得某个枚举的所有名称

《C#实现获得某个枚举的所有名称》这篇文章主要为大家详细介绍了C#如何实现获得某个枚举的所有名称,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... C#中获得某个枚举的所有名称using System;using System.Collections.Generic;usi

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

Java 枚举的常用技巧汇总

《Java枚举的常用技巧汇总》在Java中,枚举类型是一种特殊的数据类型,允许定义一组固定的常量,默认情况下,toString方法返回枚举常量的名称,本文提供了一个完整的代码示例,展示了如何在Jav... 目录一、枚举的基本概念1. 什么是枚举?2. 基本枚举示例3. 枚举的优势二、枚举的高级用法1. 枚举

Rust中的Option枚举快速入门教程

《Rust中的Option枚举快速入门教程》Rust中的Option枚举用于表示可能不存在的值,提供了多种方法来处理这些值,避免了空指针异常,文章介绍了Option的定义、常见方法、使用场景以及注意事... 目录引言Option介绍Option的常见方法Option使用场景场景一:函数返回可能不存在的值场景

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6