TYVJ1266 费解的开关
恩,这题......
看看题面想到了啥?炮兵阵地!
再仔细一思考:炮兵阵地是求放置最多,而这个显然可以递推得出。
由于每个格子至多点一次,那么我们发现:
在第一行点击状态确定的情况下,后面每个格子的点击与否都是确定的。那么我们点完之后判断一下最后一行合不合法即可。
#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 费解的开关的更多相关文章
- AcWing 95 费解的开关
目录 前言 题目链接 思路 代码 前言 博客咕咕咕了好久了,是时候写一下了 题目链接 AcWing 95 费解的开关 思路 首先可以看出 1.每一个位置顶多只会操作一次.因为如果操作两次的话,相当于不 ...
- ACAG 0x02-4 费解的开关
ACAG 0x02-4 费解的开关 对于这道题,我们不难发现如下性质: 每个位置之多被点击一次: 点击的先后顺序不影响结果: 若确定了第$1$行,则接下来可能的点击方案就只有$1$种.具体原因是:当第 ...
- TyvjP1266 费解的开关
P1266 费解的开关 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 你玩过“拉灯”游戏吗?25盏灯排成一个5x5的方形.每一个灯都有一个开关,游戏 ...
- TVYJ1266:费解的开关
我对状态空间的理解:https://www.cnblogs.com/AKMer/p/9622590.html 题目传送门:http://www.joyoi.cn/problem/tyvj-1266 这 ...
- ACWING 95 费解的开关 解题记录
你玩过“拉灯”游戏吗?25盏灯排成一个5x5的方形.每一个灯都有一个开关,游戏者可以改变它的状态.每一步,游戏者可以改变某一个灯的状态.游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也 ...
- 【ACwing 95】费解的开关——枚举 + 搜索
(题面来自ACwing) 你玩过"拉灯"游戏吗?25盏灯排成一个5x5的方形.每一个灯都有一个开关,游戏者可以改变它的状态.每一步,游戏者可以改变某一个灯的状态.游戏者改变一个灯的 ...
- ACWing95. 费解的开关
题解 这道题目有三个状态条件值得考虑: 每一个开关被按0次或者1次才有意义,如果超过1次,那么等同于按0或1次. 最终的结果与按的顺序无关 因为2,所以可以人为地规定比较合理的顺序. 现在以每一行为顺 ...
- CH0201 费解的开关 枚举
正解:枚举 解题报告: 入门傻逼题,思维难度不高代码量极小,非常适合上手 然后傻逼的我第二次看这道题的时候依然没想到解法:D 没有办法,就想着写个笔记好歹记录一下以后多复习几次就记着了趴qwq 就是, ...
- tyvj 1266 费解的开关
传送门 解题思路 枚举第一行的状态,判断后面可不可行. 代码 #include<iostream> #include<cstdio> #include<cstring&g ...
随机推荐
- Oracle字符函数length substr concat实例
--字符函数 --伪表dual --(1)求字符串长度 select length('123.456/-*') from dual --(2)截取函数求字符串的子串 ,) from dual --(3 ...
- thymeleaf 引入公共html注意事项
详细连接https://blog.csdn.net/u010260737/article/details/83616998 每个页面都会用到分页.html或者头部.html.尾部.html,在其他页面 ...
- RDD
scala> val rdd1=sc.parallelize(Array("coffe","coffe","hellp"," ...
- python之路--初识函数
一 . 函数 什么是函数 f(x) = x + 1 y = x + 1 # 函数是对功能或者动作的封装 函数的语法 def 函数名(): 函数体 调用: 函数名() def play(): print ...
- 集合之LinkedList(含JDK1.8源码分析)
一.前言 LinkedList是基于链表实现的,所以先讲解一下什么是链表.链表原先是C/C++的概念,是一种线性的存储结构,意思是将要存储的数据存在一个存储单元里面,这个存储单元里面除了存放有待存储的 ...
- Promise实现队列
有时候我不希望所有动作一起发生,而是按照一定顺序,逐个进行 var promise=doSomething(); promise=promise.then(doSomethingElse); prom ...
- CentOS6.5内核编译
内核源码包下载地址,戳我 1.准备并解压内核安装包:linux-4.14.6.tar.xz # .tar.xz -C /usr/src/ # cd /usr/src/linux- #查看linux-目 ...
- docker之harbor仓库注意事项
首先修改harbor的配置文件harbor.cfg hostname可以是ip也可以是主机名 修改docker/etc/docker/daemon.json 添加insecure-registries ...
- AHOI2013 差异 【后缀数组】
题目分析: 求出height以后很明显跨越最小height的一定贡献是最小height,所以对于区间找出最小height再将区间对半分. 代码: #include<bits/stdc++.h&g ...
- 洛谷P1330封锁阳光大学题解
题意 此题可以说是一个很裸的一个二分图染色,但是比较不同的是,这个图中可能是不联通的,因此我们需要找到所有的联通块,然后一一选出每个联通块中黑块与白块中最小的个数,然后加入到最后的答案中去,也是很坑的 ...