恩,这题......

看看题面想到了啥?炮兵阵地!

再仔细一思考:炮兵阵地是求放置最多,而这个显然可以递推得出。

由于每个格子至多点一次,那么我们发现:

在第一行点击状态确定的情况下,后面每个格子的点击与否都是确定的。那么我们点完之后判断一下最后一行合不合法即可。

 #include <cstdio>
#include <iostream>
#include <algorithm>
#define say printf("*")
using namespace std;
const int N = ,INF = 0x3f3f3f3f;
int a[N][N],f[N][N];
void out()
{
printf("\n");
for(int i=; i<=; i++)
{
for(int j=; j<=; j++) printf("%d ",a[i][j]);
printf("\n");
}
return;
}
bool check(int x,int y)
{
return x<=&&x>=&&y<=&&y>=;
}
void click(int x,int y)
{
//printf("click:%d %d\n",x,y);
a[x][y]^=;
if(check(x,y+)) a[x][y+]^=;
if(check(x,y-)) a[x][y-]^=;
if(check(x+,y)) a[x+][y]^=;
if(check(x-,y)) a[x-][y]^=;
//out();
return;
}
int cal(int x)
{
int a[],ans=;
for(int i=;i<;i++) a[i]=bool(x&(<<i));
for(int i=;i>=;i--) ans=ans*+a[i];
return ans;
}
int main()
{
int T,s,ans;char ch;
scanf("%d",&T);
while(T--)
{
ans=INF;
for(int i=; i<=; i++) ///读入
{
for(int j=;j<=;j++)
{
ch=getchar();
while(ch!=''&&ch!='') ch=getchar();
f[i][j]=ch-'';
}
}
for(int i=; i<(<<); i++) ///第一行
{
s=;
for(int j=; j<=; j++)///复制
{
for(int k=; k<=; k++) a[j][k]=f[j][k];
}
for(int j=; j>=; j--)///处理第一行
if((<<j)&i) {click(,-j);s++;}
for(int j=;j<=;j++) ///处理后四行
{
for(int k=;k<=;k++)
if(!a[j][k]) {click(j+,k);s++;}
}
bool bo=;
for(int j=;j<=;j++)
if(!a[][j]) bo=;
if(bo) continue;
//printf("%d %d %d\n",cal(i),ans,s);
ans=min(ans,s);
}
printf("%d\n",(ans<=?ans:-));
} return ;
}

AC代码

TYVJ1266 费解的开关的更多相关文章

  1. AcWing 95 费解的开关

    目录 前言 题目链接 思路 代码 前言 博客咕咕咕了好久了,是时候写一下了 题目链接 AcWing 95 费解的开关 思路 首先可以看出 1.每一个位置顶多只会操作一次.因为如果操作两次的话,相当于不 ...

  2. ACAG 0x02-4 费解的开关

    ACAG 0x02-4 费解的开关 对于这道题,我们不难发现如下性质: 每个位置之多被点击一次: 点击的先后顺序不影响结果: 若确定了第$1$行,则接下来可能的点击方案就只有$1$种.具体原因是:当第 ...

  3. TyvjP1266 费解的开关

    P1266 费解的开关 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述     你玩过“拉灯”游戏吗?25盏灯排成一个5x5的方形.每一个灯都有一个开关,游戏 ...

  4. TVYJ1266:费解的开关

    我对状态空间的理解:https://www.cnblogs.com/AKMer/p/9622590.html 题目传送门:http://www.joyoi.cn/problem/tyvj-1266 这 ...

  5. ACWING 95 费解的开关 解题记录

    你玩过“拉灯”游戏吗?25盏灯排成一个5x5的方形.每一个灯都有一个开关,游戏者可以改变它的状态.每一步,游戏者可以改变某一个灯的状态.游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也 ...

  6. 【ACwing 95】费解的开关——枚举 + 搜索

    (题面来自ACwing) 你玩过"拉灯"游戏吗?25盏灯排成一个5x5的方形.每一个灯都有一个开关,游戏者可以改变它的状态.每一步,游戏者可以改变某一个灯的状态.游戏者改变一个灯的 ...

  7. ACWing95. 费解的开关

    题解 这道题目有三个状态条件值得考虑: 每一个开关被按0次或者1次才有意义,如果超过1次,那么等同于按0或1次. 最终的结果与按的顺序无关 因为2,所以可以人为地规定比较合理的顺序. 现在以每一行为顺 ...

  8. CH0201 费解的开关 枚举

    正解:枚举 解题报告: 入门傻逼题,思维难度不高代码量极小,非常适合上手 然后傻逼的我第二次看这道题的时候依然没想到解法:D 没有办法,就想着写个笔记好歹记录一下以后多复习几次就记着了趴qwq 就是, ...

  9. tyvj 1266 费解的开关

    传送门 解题思路 枚举第一行的状态,判断后面可不可行. 代码 #include<iostream> #include<cstdio> #include<cstring&g ...

随机推荐

  1. Oracle字符函数length substr concat实例

    --字符函数 --伪表dual --(1)求字符串长度 select length('123.456/-*') from dual --(2)截取函数求字符串的子串 ,) from dual --(3 ...

  2. thymeleaf 引入公共html注意事项

    详细连接https://blog.csdn.net/u010260737/article/details/83616998 每个页面都会用到分页.html或者头部.html.尾部.html,在其他页面 ...

  3. RDD

    scala> val rdd1=sc.parallelize(Array("coffe","coffe","hellp"," ...

  4. python之路--初识函数

    一 . 函数 什么是函数 f(x) = x + 1 y = x + 1 # 函数是对功能或者动作的封装 函数的语法 def 函数名(): 函数体 调用: 函数名() def play(): print ...

  5. 集合之LinkedList(含JDK1.8源码分析)

    一.前言 LinkedList是基于链表实现的,所以先讲解一下什么是链表.链表原先是C/C++的概念,是一种线性的存储结构,意思是将要存储的数据存在一个存储单元里面,这个存储单元里面除了存放有待存储的 ...

  6. Promise实现队列

    有时候我不希望所有动作一起发生,而是按照一定顺序,逐个进行 var promise=doSomething(); promise=promise.then(doSomethingElse); prom ...

  7. CentOS6.5内核编译

    内核源码包下载地址,戳我 1.准备并解压内核安装包:linux-4.14.6.tar.xz # .tar.xz -C /usr/src/ # cd /usr/src/linux- #查看linux-目 ...

  8. docker之harbor仓库注意事项

    首先修改harbor的配置文件harbor.cfg hostname可以是ip也可以是主机名 修改docker/etc/docker/daemon.json 添加insecure-registries ...

  9. AHOI2013 差异 【后缀数组】

    题目分析: 求出height以后很明显跨越最小height的一定贡献是最小height,所以对于区间找出最小height再将区间对半分. 代码: #include<bits/stdc++.h&g ...

  10. 洛谷P1330封锁阳光大学题解

    题意 此题可以说是一个很裸的一个二分图染色,但是比较不同的是,这个图中可能是不联通的,因此我们需要找到所有的联通块,然后一一选出每个联通块中黑块与白块中最小的个数,然后加入到最后的答案中去,也是很坑的 ...