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 ...
随机推荐
- taro 与uni-app对比
https://www.jianshu.com/p/03e08399587e (copy)
- javaScript中闭包的工作原理
一.什么是闭包? 官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述的太学术.其实这句话 ...
- .Net在操作mysql查询的时候出现“: Unknown column 'UserName' in 'where clause'”错误
今天使用.Net操作mysql查询的时候,如果加上条件查询的时候就会出现 Unknown column 'UserName' in 'where clause'这个错,不加条件直接select * f ...
- WIndows下使用Grafana+InfluxDB打造监控系统
前言 对于一个运维DBA来说,了解数据库的TPS.QPS很有必要(QPS:每秒查询数,即对数据库每秒的DML的操作数:TPS:每秒事物处理,即对数据库每秒DDL操作数),通过了解他们,可以掌握一个实 ...
- MyBatis映射文件4(参数获取#{}和${}/select标签详解[返回类型为list])
参数获取 之前我们都是采用#{}的方式进行参数传递,其实MyBatis还有另外的参数传递方式${} 使用方法相同,但是还是有很大区别的 这里做一个测试: <select id="get ...
- RBAC模型
1.RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角 ...
- DAY08、文件操作
一.文件操作模式汇总: 主模式: r:读模式 w:写模式(无创建,有清空) a:追加(有创建的功能) x:写,必须自己创建文件,否则报错 从模式: t:文本操作(默认模式)r >rt,w> ...
- webpack模塊打包機
https://blog.csdn.net/qq_38277366/article/details/82907894
- js 插件使用总结
1:树形菜单插件: z-tree 和dtree 2: 弹窗插件layer 3: 前端ui框架ace , h-ui , layui 4:产品设计图绘制软件Axure和Mockplus(推荐)
- KKT条件
kkt条件背下来容易.理解上还有问题 主要是lambda≥0和lambda*f(x)=0这两个条件懵逼. 下面说明一下为什么 参考:https://blog.csdn.net/newthinker_w ...