zoukankan      html  css  js  c++  java
  • 费解的开关

    题目地址

    递推递归?不像。

    状态压缩?不够全面。

    Dfs,Bfs,枚举大法好? 也不是。

    题目难度?八皇后差不多的难度吧。反正对于大佬简单,对于我这种蒟蒻难就对了。

    模拟?对,就是模拟,膜拟,膜你... ...

    题解

    考虑一种方法,枚举第一层开关灯——因为我们只要第一层知道了,或者说是固定了,后面的开灯方案就只有一种了,也就是固定了。

    对于 2~5 层,如果 ((x,y)) 这一格是不亮的,我们只能在它的下面这格点一下,因为上面固定了

    然后我们还能发现,对于第 5 层(第5层下面就没有格子了),我们修改不了了。于是我们可以从第 5 层判断答案。

    直接看我盗的图吧。

    初始矩阵是这样,记住,第 1 层已经固定好了。

    接着如果我们要修改第 1 层,就要点第 2 层的格子。

    然后我们要修改第 2 层,就要点第 3 层的格子。

    然后同理。

    同理

    最后我们还发现这种情况行不通。

    想到枚举第 1 层开关灯,(状态压缩你值得拥有!!!)状压当然是不错的选择。

    然后你就可以轻松切掉这题啦

    Code

    #include<bits/stdc++.h>
    #define nx x+dx[i]
    #define ny y+dy[i]
    #define check(x,y) (x>=1&&x<=5&&y>=1&&y<=5)
    #define INF 0x3f3f3f
    using namespace std;
    const int dx[] = {0,0,0,1,-1};
    const int dy[] = {0,1,-1,0,0};
    int n,step,ans=INF;
    bool a[6][6],b[6][6];
    inline void click(int x,int y) {	//click 点击 
    	for(int i=0;i<5;++i) {
    		if(check(nx,ny)) {
    			b[nx][ny] ^= 1;
    		}
    	}
    }
    int main()
    {
    	scanf("%d",&n);
    	int maxn = (1<<5) - 1;
    	while(n--) {
    		ans = INF;
    		for(int i=1;i<=5;++i)
    			for(int j=1;j<=5;++j)
    				scanf("%1d",&a[i][j]);
    		for(int bit=0;bit<=maxn;++bit) {
    			for(int i=1;i<=5;++i)
    				for(int j=1;j<=5;++j)
    					b[i][j] = a[i][j];
    			step = 0;
    			for(int i=0;i<5;++i) {
    				bool x = bit & (1<<i);
    				if(x) {
    					click(1,i+1); step++;
    				}
    			}	//预处理 
    			for(int i=1;i<=4;++i) {
    				for(int j=1;j<=5;++j) {
    					if(!b[i][j])  {
    						click(i+1,j); step++;
    					}
    				}
    			}
    			if(step > 6) continue;
    			bool flag = 1;
    			for(int i=1;i<=5;++i) {
    				if(!b[5][i]) flag = 0;
    			}
    			if(flag) ans = min(ans,step);
    		}
    		if(ans==INF) puts("-1");
    		else printf("%d
    ",ans);
    	}
    	return 0;
    }
    

    大家可千万别学我,盗图是极其可耻的行为!!!

  • 相关阅读:
    转:高并发高负载系统架构
    用java模拟银行柜台排队
    转:VS2010与SVN
    转:MySQL导入.sql文件及常用命令
    转:Mongodb中随机的查询文档记录
    转:Thumbs.db是什么文件?是病毒吗?怎么处理?
    转:OWASP发布Web应用程序的十大安全风险
    转:Top 10 Algorithms for Coding Interview
    编写C# Windows服务,用于杀死Zsd.exe进程
    转:eclipse载入extjs4出现内存溢出错误的解决方法
  • 原文地址:https://www.cnblogs.com/BaseAI/p/11409759.html
Copyright © 2011-2022 走看看