恩,这题......

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

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

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

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

 #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. CSS3 Flexbox轻巧实现元素的水平居中和垂直居中

    CSS3 Flexbox轻松实现元素的水平居中和垂直居中 网上有很多关于Flex的教程,对于Flex的叫法也不一,有的叫Flexbox,有的叫Flex,其实这两种叫法都没有错,只是Flexbox旧一点 ...

  2. png8、16、24、32位的区别

    我们都知道一张图片可以保存为很多种不同的格式,比如bmp/png/jpeg/gif等等.这个是从文件格式的角度看,我们抛开文件格式,看图片本身,我们可以分为8位, 16位, 24位, 32位等. 单击 ...

  3. SpringBoot 中 JPA 的使用

    详细连接 简书https://www.jianshu.com/p/c14640b63653 新建项目,增加依赖 在 Intellij IDEA 里面新建一个空的 SpringBoot 项目.具体步骤参 ...

  4. MCV 和 MTV框架基本信息

    一 . MCV # web服务器开发最著名的MVC模式 M : model.py 就是和数据库打交道的, 创建表等操作 V : view 视图(视图函数,就是装HTML文件的) C : control ...

  5. Java 基础类型 默认值

    (1)数据库里的列,如果有默认值,不能赋值有业务含义的值. (2)int 默认值 java会分配默认值的额.

  6. MySQL 大数据量分页优化

    假设有一个千万量级的表,取1到10条数据: ,; ,; 这两条语句查询时间应该在毫秒级完成: ,; 你可能没想到,这条语句执行之间在5s左右: 为什么相差这么大? 可能mysql并没有你想的那么智能, ...

  7. Atcoder Beginner Contest 121 D - XOR World(区间异或和)

    题目链接:https://atcoder.jp/contests/abc121/tasks/abc121_d 题目很裸(Atcoder好像都比较裸 就给一个区间求异或和 n到1e12 肯定不能O(n) ...

  8. [离散时间信号处理学习笔记] 9. z变换性质

    z变换描述 $x[n] \stackrel{\mathcal{Z}}{\longleftrightarrow}X(z) ,\quad ROC=R_x$ 序列$x[n]$经过z变换后得到复变函数$X(z ...

  9. a标签实现锚点功能

    a标签实现锚点功能 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  10. 18mysql3

    一.内外连接全连接,左右连接   █▓        通过两张表查找其对应的记录. 隐式 内连接 select * from a,b where a.列名 = b.列名   █▓        左连接 ...