首页 > 其他分享 >费解的开关

费解的开关

时间:2023-01-03 16:26:19浏览次数:44  
标签:第一行 int 费解 第三行 确定 开关 第四行 第二行

题目链接:https://www.acwing.com/problem/content/97/

非常不好做的一道题,理解起来也有难度的题目

做法一:bfs

时间复杂度很高

做法二:二进制状态转移

我们先可以确定第一行是不变的,把第一行全部处理成灯亮,这样我们就可以确定第二行的状态,若对第二行进行修改则用第三行的五个方位就行了,同理

根据第三行确定第四行,根据第四行确定第五行,然后枚举第五行五个灯的状态,如果存在不亮的就说明给定的这个图是不行的

code:

 1 //具体思想:确定第一行之后来确定第二行的状态,然后是第三行,第四行,然后遍历第五行是否存在0即可
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 #define int long long 
 5 #define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
 6 const int N=30;
 7 int t;
 8 char g[N][N];
 9 const int INF=0x3f3f3f3f;
10 int dir[5][2]={
11     {-1,0},
12     {0,1},
13     {1,0},
14     {0,-1},
15     {0,0}
16 };
17 void turn(int x,int y)
18 {
19     for(int i=0;i<5;i++)
20     {
21         int dx=x+dir[i][0];
22         int dy=y+dir[i][1];
23         if(dx>=0&&dx<5&&dy>=0&&dy<5)
24         {
25             if(g[dx][dy]=='0')
26             {
27                 g[dx][dy]='1';
28             }
29             else 
30             {
31                 g[dx][dy]='0';
32             }
33         }
34     }
35 }
36 int solved(){
37     int ans=INF;
38     for(int i=0;i<1<<5;i++)//确定第一行,第一行每一个有0/1两种状态,共五个为1<<5=32
39     {
40         int res=0;//统计步数
41         char backup[N][N];//备份
42         memcpy(backup,g,sizeof(g));
43         for(int j=0;j<5;j++)//枚举第一行的五个
44         {
45             if(i>>j&1)//对应了 00010 表示第2个位置的按一下
46             //  对应了00011 表示第1 和第2个位置的按一下
47             {
48                 res++;
49                 turn(0,j);//对第j个进行变化
50             }
51         }
52         for(int j=0;j<4;j++)//枚举前4行
53         {
54             for(int k=0;k<5;k++)//枚举每一个
55             {
56                 if(g[j][k]=='0')//如果是0就变下一行与之对应的
57                 {
58                     res++;
59                     turn(j+1,k);
60                 }
61             }
62         }
63         bool flag=false;
64         for(int j=0;j<5;j++)//存在‘0’则说明变化最后还不成功
65         {
66             if(g[4][j]=='0')
67             {
68                 flag=true;
69                 break;
70             }
71         }
72         if(!flag)
73         ans=min(ans,res);
74         memcpy(g,backup,sizeof(g));//备份还原
75     }
76     if(ans>6)
77     ans=-1;
78     return ans;
79 }
80 signed main()
81 {
82     IOS;
83     cin>>t;
84     while(t--)
85     {
86         for(int i=0;i<5;i++)
87         {
88             for(int j=0;j<5;j++)
89             {
90                 cin>>g[i][j];
91             }
92         }
93         cout<<solved()<<endl;
94     }
95     return 0;
96 }

建议这道题多理解理解,多敲一下尤其是状态的二进制表示和对第一行的处理

标签:第一行,int,费解,第三行,确定,开关,第四行,第二行
From: https://www.cnblogs.com/LQS-blog/p/17022545.html

相关文章

  • 房间开关灯可以唤醒睡眠的计算机的解决方法
     原因:据说是同一个电路,电流的变化会产生脉冲。 解决办法:将键盘和鼠标对计算机睡眠的唤醒功能关闭。 001、右击此电脑,选择管理   002、  003、找到右......
  • 开关电灯
    <!DOCTYPEhtml><html><head><metacharset="utf-8"><title></title><linkrel="stylesheet"href="new_file.css"></head><......
  • 优维低代码:关联微应用和Feature Flags 特性开关
    优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维......
  • GBJ406-ASEMI开关电源整流桥GBJ406
    编辑:llGBJ406-ASEMI开关电源整流桥GBJ406型号:GBJ406品牌:ASEMI封装:GBJ-4特性:整流桥正向电流:4A反向耐压:600V恢复时间:>2000ns引脚数量:4芯片个数:4芯片尺寸:84MIL浪涌电流:150A漏电......
  • GBJ406-ASEMI开关电源整流桥GBJ406
    编辑:llGBJ406-ASEMI开关电源整流桥GBJ406型号:GBJ406品牌:ASEMI封装:GBJ-4特性:整流桥正向电流:4A反向耐压:600V恢复时间:>2000ns引脚数量:4芯片个数:4芯片尺寸:84MIL浪......
  • 开关量、模拟量、脉冲量分不清楚?PLC最全编程算法详解,看完彻底懂了!
    PLC中无非就是三大量:开关量、模拟量、脉冲量。只在搞清楚三者之间的关系,你就能熟练的掌握PLC了。开关量的计算1、开关量也称逻辑量,指仅有两个取值,0或1、ON或OFF。它是最......
  • 那些你不知道的炫酷开关交互效果(12种)
    本文将继续更新那些炫酷交互效果系列文章,今天带来的是有关toggle开关相关的组件。以下是本次文章涉及到的开关组件总览图,总计收集12款不同交互效果,相信总有一款适合你。......
  • 通过API操作阿里云ECS(开关机)
    场景:定时开关机ECS,节省模式关机完整代码示例官方链接:https://next.api.aliyun.com/api-tools/sdk/Ecs?version=2014-05-26&language=go-tea关机:https://next.api.aliyun......
  • 关于高压开关柜在线测温方案的应用探讨
    罗轩志(安科瑞电气股份有限公司上海嘉定201801)  摘要:全封闭式高压开关柜在配电网中大量使用,运行可靠性得以大幅提高,由于高压开关柜全封闭的特点及无人值守运行模式给日常......
  • KSZ8895RQXI(接口控制器)TPS61170QDRVRQ1、LM53602AQPWPRQ1开关稳压器
    概述:1、KSZ8895RQX是一种高度集成的,第二层管理的五端口交换机,具有众多功能,旨在降低系统成本。它适用于成本敏感的10/100Mbps五端口交换系统,具有低功耗、片上终端和内部核心......