【部分枚举】【3-21个人赛】ProblemH
Problem H
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 77 Accepted Submission(s) : 27
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
爱情公寓是一个情侣们都向往的地方,导致现在整幢公寓都已经住满了人。公寓一共有n(3<=n<=100)层,每层有m(3<=m<=6)个房间,从外面看上去就是一个n*m的网格。每当傍晚降临,家家户户都要开灯,用灯泡照亮他们美好的未来。可惜的是灯泡也有傲娇的时候,尤其是看到这么多情侣,所以只有一部分的房间的灯被打开了,还有一部分的灯无论房间的开关怎么动都是暗的。这个时候,身为ACMer的你勇敢的hack进了公寓的电路系统,发现这里有另外一套开关,它的规则是这样:当你改变[i,j]号灯的状态时,[i,j]上下左右的四个灯(如果有的话)也随之改变状态。改变状态的意思是从开到关,或者从关到开。聪明的你能不能通过一系列的操作使得整幢公寓的灯泡都亮起来呢?
Input
对于每组测试数据,第一行有两个数n和m,描述见上。接下来有n行,每行有m个数,为0或1,0表示灯暗,1表示灯亮。
Output
Sample Input
2
3 3
0 0 0
0 1 0
0 0 0
3 3
0 0 0
0 0 0
0 0 0
Sample Output
YES
YES
类似
http://blog.csdn.net/zy691357966/article/details/40082595
代码如下:
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#define oo 0x13131313
using namespace std;
void init()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
}
int n,m;
int MAP[105][10];
int A[105][10];
int fx[5]={0,0,0,1,-1},fy[5]={0,1,-1,0,0};
void COPY()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
A[i][j]=MAP[i][j];
}
}
void CHANGE(int i,int j)
{
A[i][j]=A[i][j]^1;
for(int k=1;k<=4;k++)
{
A[i+fx[k]][j+fy[k]]^=1;
}
}
void input()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
scanf("%d",&MAP[i][j]);
}
}
int dfs(int line)
{
if(line==n+1) {
int OK=1;
for(int i=1;i<=m;i++)
if(A[line-1][i]==0) OK=0;
if(OK) return 1;
else return 0;
}
for(int i=1;i<=m;i++)
{
if(A[line-1][i]==0) CHANGE(line,i);
}
return dfs(line+1);
}
void solve()
{
int OK=0;
for(int i=0;i<=(1<<m)-1;i++)
{
COPY();
for(int j=1;j<=m;j++)
{
int temp=(i>>(j-1))&1;
if(temp==1)
{
CHANGE(1,j);
}
}
if(dfs(2))
{
OK=1;
break;
}
}
if(OK) printf("YES\n");
else printf("NO\n");
}
int main()
{
//init();
int T;
cin>>T;
while(T--)
{
input();
solve();
}
}
【部分枚举】【3-21个人赛】ProblemH的更多相关文章
- Object备忘录
1.Object.assign(target,...source) 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象.它将返回目标对象. 2.Object.create()方法创建一个新对 ...
- 第8章 自己写库-构建库函数雏形—零死角玩转STM32-F429系列
第8章 自己写库—构建库函数雏形 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...
- 设计模式 UML & java code
A: 创造性模式 1. 工厂方法模式(FactoryMethod) 1.1 类图 1.2 代码1 public interface Pet { public String petSound(); } ...
- (转)数位dp
原博客 https://blog.csdn.net/wust_zzwh/article/details/52100392 建议原博客看到hdu 不要62,然后看我分割线后两道题,然后再回来看原博.-- ...
- 数位dp 简单入门
推荐博客 推荐博客 数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数.所谓数位dp,字面意思就是在数位上进行dp咯.数位还算是比较好听的名字,数位的含义:一个数有 ...
- 数位dp总结 之 从入门到模板
转发自WUST_WenHao巨巨的博客 基础篇 数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数.所谓数位dp,字面意思就是在数位上进行dp咯.数位还算是比较好听 ...
- P2480 [SDOI2010]古代猪文
P2480 [SDOI2010]古代猪文 比较综合的一题 前置:Lucas 定理,crt 求的是: \[g^x\bmod 999911659,\text{其中}x=\sum_{d\mid n}\tbi ...
- 数位dp(贴一个模板=。=)
emmmm,之前看到大佬的博客感觉这个模板挺有用的,就贴了一个= = 然后解释什么的都有了就...... 数位dp一般应用于: 求出在给定区间[A,B]内,符合条件P(i)的数i的个数. 条件P(i) ...
- 掌握数位dp
最近遇到了数位dp题目,于是就屁颠屁颠的跑过来学习数位dp了~ "在信息学竞赛中,有这样一类问题:求给定区间中,满足给定条件的某个D 进制数或此类数的数量.所求的限定条件往往与数位有关,例如 ...
- 【题解】Luogu p2964 BZOJ 2017[Usaco2009 Nov]硬币游戏
题目描述 Farmer John's cows like to play coin games so FJ has invented with a new two-player coin game c ...
随机推荐
- android面试题之五
二十六.什么情况会导致Force Close ?如何避免?能否捕获导致其的异常? 抛出运行时异常时就会导致Force Close,比如空指针.数组越界.类型转换异常等等. 捕获:可以通过logcat查 ...
- 并查集+二分-hdu-4750-Count The Pairs
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4750 题目大意: 给一无向图,n个点,m条边,每条边有个长度,且不一样.定义f(i,j)表示从节点i ...
- linux下 /etc/profile、~/.bash_profile ~/.profile的执行过程
关于登录linux时,/etc/profile.~/.bash_profile等几个文件的执行过程. 在登录Linux时要执行文件的过程如下: 在刚登录Linux时,首先启动 /etc/profile ...
- C# 单例模式(转)
C#设计模式学习笔记-单例模式 最近在学设计模式,学到创建型模式的时候,碰到单例模式(或叫单件模式),现在整理一下笔记. 在<Design Patterns:Elements of Resuab ...
- Asp.Net Identity自定义user类的运用,ClaimsIdentity
mvc5自动生成的用户验证是比较好用的,还可以扩展,可是要求code first,目前使用sqlite,支持entity framework,但不支持code first. 只有自已简单模仿一下了.经 ...
- Windows7中安装内存与可用内存不一致的解决办法
转载:http://blog.sina.com.cn/s/blog_56741a420100h9d1.html 问题现象: 安装完Windows7后,在计算机->属性中,会看到安装内存.但有时在 ...
- PHP学习笔记十一【数组】
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/h ...
- Eclipse安装与搭建Maven
Maven的具体参考书可以看:<Maven实战> 下载maven可以到:http://maven.apache.org/ Maven的eclipse基本使用可以在这里看到:http://w ...
- 利用jQuery实现的Ajax 验证用户名是否存在
异步刷新实现方式有多种,也可以借助JS的多种框架,下面是使用jQuery框架实现的AJAX 验证用户名是否存在 jQuery.ajax概述 HTTP 请求加载远程数据. 通过jQuery 底层 AJA ...
- jQuery工具函数下
测试操作 1.判断是否为数组对象 $(function () { //判断是否为数组对象 var arr = [1,2,3,4]; alert($.isArray(arr));//true }); 2 ...