AcWing 95. 费解的开关(递推)

题目链接

活动 - AcWing 本活动组织刷《算法竞赛进阶指南》,系统学习各种编程算法。主要面向有一定编程基础的同学。icon-default.png?t=N7T8https://www.acwing.com/problem/content/97/

题解

只要第一行开关的状态确定,则所有开关的状态都可以被推出来。第一行开关总共有2^5 = 32种操作方法,可以先二进制枚举出第一行的状态,其它行的状态就可以从上一行推出来。上一行为0,下一行必须得变;上一行为1,下一行必须不变。最终,如果最后一行全为1且步数小于等于6,则可以使所有的灯全变亮,否则不能。

代码

#include <cstdio>
#include <cstring>using namespace std;const int N = 6;char g[N][N], bg[N][N];
int dx[5] = {-1, 0, 1, 0, 0}, dy[5] = {0, 1, 0, -1, 0};void turn(int x, int y)  // 按一下第x行第y列的开关
{for (int i = 0; i < 5; i++){int a = x + dx[i], b = y + dy[i];if (a < 0 || a >= 5 || b < 0 || b >= 5) continue;g[a][b] ^= 1;}
}int main()
{int T;scanf("%d", &T);while (T--){for (int i = 0; i < 5; i++) scanf("%s", bg[i]);int res = 10;for (int op = 0; op < 32; op++){int cnt = 0;memcpy(g, bg, sizeof g);// 操作第一行的开关for (int i = 0; i < 5; i++)if (op >> i & 1){turn(0, i);cnt++;}// 递推出第1~4行开关的状态for (int i = 0; i < 4; i++)for (int j = 0; j < 5; j++)if (g[i][j] == '0'){turn(i + 1, j);cnt++;}// 检查最后一行灯是否全亮bool success = true;for (int i = 0; i < 5; i++)if (g[4][i] == '0')success = false;if (success && res > cnt) res = cnt;}if (res > 6) res = -1;printf("%d\n", res);}return 0;
}

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

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

相关文章

Nginx的server层外层的常见配置语句的解读

有下面的Nginx配置: worker_processes auto; worker_rlimit_nofile 51200;events {use epoll;worker_connections 51200;multi_accept on; }http {include mime.types;default_type application/octet-stream;server_names_hash_bucket_size 512;client_max_body_size 50m;cli…

QT作业3

完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&#xf…

LAMP LNMP 企业网站架构部署和优化

LAMP 架构 LAMP架构&#xff1a;是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整套系统和相关软件&#xff0c;能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词&#xff0c;具体包括Linux操作系统、Apache网站服务器、MySQL数据库服务器、PHP&…

Python中 dearpygui 和 Tkinter 的对比与选择

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是彭涛&#xff0c;今天为大家分享 Python中 dearpygui 和 Tkinter 的对比与选择&#xff0c;全文4400字&#xff0c;阅读大约15分钟。 Python 中有许多用于创建图形用户界面的库&#xff0c;其中 dearpygui&a…

Web安全-SQL注入【sqli靶场第11-14关】(三)

★★实战前置声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将其信息做其他用途&#xff0c;由用户承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 0、总体思路 先确认是否可以SQL注入&#xff0…

JAVA使用HTTP代码示例

你好&#xff0c;Java开发者们&#xff01;今天&#xff0c;我要给你们带来一场硬核的盛宴&#xff0c;那就是在Java中使用HTTP协议进行网络通信的代码示例。准备好接受挑战了吗&#xff1f;Lets go&#xff01; 首先&#xff0c;我们需要导入一些必要的库&#xff0c;它们将成…

[java/jdbc]插入数据时获取自增长主键的值

需求 数据库中的unum字段为自增长主键&#xff0c;使用sql语句插入时需要获取主键的值 insert into udata(upwd,utime,upath) values(?,?,?) 插入之后再查找显然效率太慢&#xff0c;其实jdbc提供了getGeneratedKeys()方法来获取主键 代码 PreparedStatement ps conn.p…

孩子还是有一颗网安梦——Bandit通关教程:Level0

&#x1f575;️‍♂️ 专栏《解密游戏-Bandit》 &#x1f310; 游戏官网&#xff1a; Bandit游戏 &#x1f3ae; 游戏简介&#xff1a; Bandit游戏专为网络安全初学者设计&#xff0c;通过一系列级别挑战玩家&#xff0c;从Level0开始&#xff0c;逐步学习基础命令行和安全概念…

Go语言学习路线规划

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

【底层服务/编程功底系列】「网络通信体系」带你攻克网络技术之TCP协议的三次握手和四次链接的技术盲区

背景 当一台客户端和一台服务器进行通信时&#xff0c;TCP协议使用三次握手和四次挥手来建立和终止连接。 三次握手的作用 确认双方的发送和接收能力&#xff1a;在三次握手中&#xff0c;客户端和服务器需要交换彼此的序列号和确认号&#xff0c;以确认彼此的发送和接收能力…

安装程序无法自动安装Virtual Machine Communication Interface Sockets(VSock)驱动程序

环境情况&#xff1a; 物理机win10系统 虚拟机windowserver08系统 vmware 16.0的版本 问题触发&#xff1a; 在虚拟机win7系统上安装vmware tools出现提示&#xff0c;报错信息“安装程序无法自动安装Virtual Machine Communication Interface Sockets&#xff08;VSock&a…

一文详解Java语言的条件判断语句

目录 一、什么是Java语言 二、什么是条件判断 三、if语句 四、switch语句 一、什么是Java语言 Java是一种广泛使用的高级编程语言&#xff0c;最初由Sun Microsystems&#xff08;现在是Oracle公司的一部分&#xff09;于1995年发布。它是一种面向对象的语言&#xff0c;具…