当前位置:网站首页>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;
}
边栏推荐
- Zephyr 學習筆記2,Scheduling
- Thesis learning -- time series similarity query method based on extreme point characteristics
- BUUCTF(3)
- Unity write word
- Take you to master the formatter of visual studio code
- 墨者学院-Webmin未经身份验证的远程代码执行
- Project 1 household accounting software (goal + demand description + code explanation + basic fund and revenue and expenditure details record + realization of keyboard access)
- Div hidden in IE 67 shows blank problem IE 8 is normal
- Activiti常见操作数据表关系
- Leetcode (215) -- the kth largest element in the array
猜你喜欢
[Gurobi] 简单模型的建立
Comparison between applet framework and platform compilation
【Go基础】2 - Go基本语句
运动【跑步 01】一个程序员的半马挑战:跑前准备+跑中调整+跑后恢复(经验分享)
This monitoring system can monitor the turnover intention and fishing all, and the product page has 404 after the dispute appears
PCIE知识点-010:PCIE 热插拔资料从哪获取
1. Getting started with QT
How to send mail with Jianmu Ci
Go h*ck yourself:online reconnaissance (online reconnaissance)
节点基础~节点操作
随机推荐
zabbix监控系统部署
[go basics] 2 - go basic sentences
[test de performance] lire jmeter
BUUCTF(4)
How to get bytes containing null terminators from a string- c#
Basic DOS commands
C # implements a queue in which everything can be sorted
How to set multiple selecteditems on a list box- c#
User login function: simple but difficult
zabbix 5.0监控客户端
1. Getting started with QT
What are the work contents of operation and maintenance engineers? Can you list it in detail?
What determines vacuum permittivity and vacuum permeability? Why do these two physical quantities exist?
NPM run build error
运动【跑步 01】一个程序员的半马挑战:跑前准备+跑中调整+跑后恢复(经验分享)
Devops Practice Guide - reading notes (long text alarm)
Leetcode 23. Merge K ascending linked lists
论文学习——基于极值点特征的时间序列相似性查询方法
Do you know about autorl in intensive learning? A summary of articles written by more than ten scholars including Oxford University and Google
神经网络入门(下)