当前位置:网站首页>The second session of the question swiping and punching activity -- solving the switching problem with recursion as the background (I)
The second session of the question swiping and punching activity -- solving the switching problem with recursion as the background (I)
2022-07-04 07:54:00 【Poplar branch】
AcWing 95. Inexplicable switch day03 【C++】
Title Description
source :acwing
Original title transmission gate
Problem solving report
One 、 Understanding of topic meaning
Players change the state of a light and have a chain reaction : And this lamp up and down adjacent to the left and right lights should also change their state accordingly .
Use windows Own drawing , Hold on shift Drag the mouse to draw the following graphics for demonstration .
Sample demonstration :
Two 、 The operation of each line of switch is completely determined by the light on and off of the previous line
- Suppose all the states in the first row are determined by enumeration , Each switch is either pressed , Or don't press , Here it is 2 5 2^5 25 Secondary selection .
- According to the light off state of the previous line , Decide how to press the next line , To ensure that the previous line is bright .
3、 ... and 、 The details are finalized
- How to enumerate the first line 32 In the operation . A five bit binary can just represent this 32 Kind of operation . such as
11010 => Corresponding to the first 26 Operations . that 0 ~ 2 5 2^5 25-1 You can enumerate the first row one by one 32 Kind of plan
Switch on function
After clicking the switch in one position , Its four position switches will be changed . Use four i f if if It seems too troublesome . What is considered here is to add Offset implementation .Time complexity
32 ∗ 25 ∗ 5 ∗ 500 = 2000000 32 * 25 * 5 * 500 = 2000000 32∗25∗5∗500=2000000, About twomillion calculations . There is no problem at all
Reference code
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 6;
char g[N][N],backup[N][N];
int dx[] = {-1,0,1,0,0} , dy[] = {0,-1,0,1,0};
// completion turn function
void turn(int x,int y)
{
for(int i = 0; i < 5;i++)
{
int a = x+dx[i] , b = y + dy[i];
// Judgement boundary
if(a < 0 || a >= 5 || b < 0 || b>= 5) continue;
// Update status
g[a][b] ^= 1;
}
}
int main()
{
int T;
cin >> T;
while(T--)
{
// Building maps
for(int i = 0; i < 5;i++) cin >> g[i];
int res = 10;// Record answer
// Enumerate the first line of 32 A choice
for(int op = 0; op < 32;op++)
{
memcpy(backup,g,sizeof g);
int step = 0;// Record the steps performed
// Deal with whether there is a light that can be pressed on in the current scheme
for(int i = 0; i < 5; i++)
{
if(!(op >> i &1))
{
step ++;
turn(0,i);
}
}
// According to the current situation in the first line , Deal with the processing of the next four lines
for(int i = 0; i < 4;i++)
{
for(int j = 0; j < 5;j++)
if(g[i][j] == '0')
{
step ++;
turn(i+1,j);
}
}
// Traverse the last line , If there is a black lamp , Then the current scheme fails
bool dark = false;// Mark
for(int i = 0; i < 5;i++)
if(g[4][i] == '0')
{
dark = true;
break;
}
if(!dark) res = min(res,step);
memcpy(g,backup,sizeof g);// Get the data back from the backup
}
if(res > 6) res = -1;//res = -1 Represents no solution
cout << res << endl;
}
return 0;
}
边栏推荐
- 时序数据库 InfluxDB 2.2 初探
- WordPress get_ Users() returns all users with comparison queries - PHP
- 1. Kalman filter - the best linear filter
- The frost peel off the purple dragon scale, and the xiariba people will talk about database SQL optimization and the principle of indexing (primary / secondary / clustered / non clustered)
- Activiti常見操作數據錶關系
- 21个战略性目标实例,推动你的公司快速发展
- System architecture design of circle of friends
- Wechat has new functions, and the test is started again
- Sort by item from the list within the list - C #
- L2-013 red alarm (C language) and relevant knowledge of parallel search
猜你喜欢
Flask 常用组件
[Gurobi] 简单模型的建立
[network security] what is emergency response? What indicators should you pay attention to in emergency response?
System architecture design of circle of friends
节点基础~节点操作
Common components of flask
如何用MOS管来实现电源防反接电路
Blog stop statement
PCIe knowledge points -010: where to get PCIe hot plug data
zabbix监控系统邮件报警配置
随机推荐
zabbix监控系统部署
WordPress get_ Users() returns all users with comparison queries - PHP
This monitoring system can monitor the turnover intention and fishing all, and the product page has 404 after the dispute appears
Moher college phpMyAdmin background file contains analysis traceability
One of the general document service practice series
Go learning notes - constants
Zephyr learning notes 1, threads
Practice (9-12 Lectures)
How to get bytes containing null terminators from a string- c#
How to use C language code to realize the addition and subtraction of complex numbers and output structure
L1-021 important words three times (5 points)
What does range mean in PHP
Show server status on Web page (on or off) - PHP
zabbix监控系统邮件报警配置
博客停更声明
Leetcode 23. Merge K ascending linked lists
Wechat has new functions, and the test is started again
[test de performance] lire jmeter
Basic DOS commands
zabbix 5.0监控客户端