panel(NOIP模拟赛Round 4)
好吧,,这道题。。本来以为挺难的。打了个暴力bfs+hash(期望得分30,实际得分30)
奇特的是,这道题如果不用hash(期望得分20,实际得分100),好吧数据实在是太水了(不会T吗?)
然后我们寻找正解
在此膜一下巨神学弟clz
著名的clz告诉我们,我们只需要暴力枚举第一行的情况,然后可以直接O(n^7m)得出结果??
因为我们知道,假设第一行的情况是确定的,并且我们已经递归到了第二行的第i个按钮。
那么panel[1][i-1]若是不亮的,那么我们必须要按这个按钮,因为除了这种办法没有办法使panel[1][i-1]变亮。
后n-2行同理
虽然跑的比标程慢,但是好理解多啦!!
顺便提一下标程的解法:
标程的解法其实差不多,不过在暴力枚举第一行的同时还暴力枚举了第一列,这样做的时候判断次数减少,所以更快
复杂度玄学。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
bool block[][];
bool now[][];
int ans,n,m,t;
char ch;
int sum;
/*inline void fan(int x,int y)
{
for(int i=x-1;i<=x+1;i++)
for(int j=y-1;j<=y+1;j++)
now[i][j]^=1;
}*/
inline void fan(int x,int y)
{
now[x-][y-]^=;now[x-][y]^=;now[x-][y+]^=;
now[x][y-]^=;now[x][y]^=;now[x][y+]^=;
now[x+][y-]^=;now[x+][y]^=;now[x+][y+]^=;
}
void dfs(int num){
if(num>n)
{
for(int i=;i<=m;i++)
{
if(!now[n][i])return;
}
ans=ans<sum?ans:sum;return;
}
fan(num,);sum++;
int s;
s=;
for(int i=;i<m;i++)
if(!now[num-][i])fan(num,i+),sum++,s|=(<<i);
if(now[num-][m])dfs(num+);
for(int i=;i<m;i++)
if((s>>i)&)fan(num,i+),sum--;
fan(num,);sum--;
s=;
for(int i=;i<m;i++)
if(!now[num-][i])fan(num,i+),sum++,s|=(<<i);
if(now[num-][m])dfs(num+);
for(int i=;i<m;i++)
if((s>>i)&)fan(num,i+),sum--;
}
int main(){
// freopen("panel.in","r",stdin);
// freopen("panel.out","w",stdout);
scanf("%d",&t);
for(int i=;i<=t;i++)
{
ans=;
scanf("%d%d",&n,&m);
for(int j=;j<=n;j++)
for(int k=;k<=m;k++)
{
ch=getchar();
if(ch=='*') block[j][k]=;
else if(ch=='.') block[j][k]=;
else --k;
}
for(int s=;s<(<<m);s++)
{
sum=;
for(int j=;j<=n;j++)
for(int k=;k<=m;k++)
now[j][k]=block[j][k];
for(int j=;j<m;j++)
{
if((s>>j)&) fan(,j+),sum++;
}
dfs();
}
if(ans==)puts("-1");
else printf("%d\n",ans);
}
// fclose(stdin);
// fclose(stdout);
}
panel(NOIP模拟赛Round 4)的更多相关文章
- 水(NOIP模拟赛Round #10)
题目描述: 小Z有一个长度为的数列.他有次令人窒息的操作,每次操作可以使某个数字或.他当然是希望这些数字的乘积尽量小了.为了简化题目,你只需输出操作完成后的数列即可. ———————————————— ...
- 小红帽的画笔(NOIP模拟赛Round 7)
又到了神奇的模拟赛时间~ 真是丧~ 好吧我们来看看题目 小红帽是Pop star上最著名的人类画家,她可以将任何画出的东西变成真实的物品.赋予她这样神奇能力的正是她手上的画笔. 小红帽每次作画时,都需 ...
- YYH的营救计划(NOIP模拟赛Round 6)
题目描述 “咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!YYH感动的热泪盈眶,开起了门…… YYH的父亲下班回家,街坊邻居说YYH被一群陌生人强行押上了警车!YYH的父 ...
- 题(NOIP模拟赛Round #10)
题目描述: 有一张的地图,其中的地方是墙,的地方是路.有两种操作: 给出个地点,询问这个地点中活动空间最大的编号.若询问的位置是墙,则活动空间为:否则活动空间为询问地点通过四联通能到达的点的个数.如果 ...
- 大(NOIP模拟赛Round #10)
题目描述: 小Z有个n个点的高清大图,每个点有且只有一条单向边的出边.现在你可以翻转其中的一些边,使他从任何一个点都不能通过一些道路走回这个点.为了方便,你只需输出方案数对取模即可.当在两个方案中有任 ...
- bananahill(NOIP模拟赛Round 8)
题目描述 香蕉川由座香蕉山组成,第i座山有它的高度.小Z准备从左到右爬这里的恰好座香蕉山,但他不希望山的高度起伏太大,太过颠簸,会让本就体育不好的他过于劳累.所以他定义了爬山的劳累度是所有爬的相邻的两 ...
- 战斗机的祈雨仪式(NOIP模拟赛Round 7)
[问题描述] 炎炎夏日,如果没有一场大雨怎么才能尽兴?秋之国的人民准备了一场祈雨仪式.战斗机由于拥有操纵雷电的能力,所以也加入了其中,为此,她进行了一番准备. 战斗机需要给自己的Spear of Lo ...
- 魔法使的烟花(NOIP模拟赛Round 7)
[问题描述] 魔法森林里有很多蘑菇,魔法使常常采摘它们来制作魔法药水.为了在6月的那个奇妙的晚上用魔法绽放出最绚丽的烟花,魔法使决定对魔法森林进行一番彻底的勘探. 魔法森林分为n个区域,由n-1条长度 ...
- 灰姑娘的水晶鞋(NOIP模拟赛Round 7)
[问题描述] 传说中的水晶鞋有两种颜色:左边的水晶鞋是红色,右边的是蓝色,据说穿上它们会有神奇的力量. 灰姑娘要找到她所有的n双水晶鞋,它们散落在一条数轴的正半轴上,坐标各不相同,每双水晶鞋还有一个权 ...
随机推荐
- 学习python第十三天,函数5 装饰器decorator
定义:装饰器本质是函数,(装饰其他函数)就是为其他函数添加附加功能原则:1.不能修改被装饰的函数的源代码 2.不能修改装饰的函数的调用方式 实现装饰器知识储备1函数即变量2.高阶函数,满足2个条件之一 ...
- stark组件(7):增加分页功能
效果图: 分页部分代码: # 1.分页处理 all_count = self.model_class.objects.all().count() query_params = request.GET. ...
- 指定的参数已超出有效值的范围。 参数名: site
“/”应用程序中的服务器错误. 指定的参数已超出有效值的范围.参数名: site 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的 ...
- [BZOJ1927]星际竞速(费用流)
Description 题意:给定n个点m条边的无向图,只能从编号小的到编号大的,且要求经过所有点刚好一次,而且可以从任意点瞬移到i号点并花费代价Ai,求最小代价. n<=800,m<=1 ...
- Highest Tower 18中南多校第一场H题
一.题意 给出N个方块,要求给出一个方案,使得1. 所有方块都被使用到(题目数据保证这点) 2.所有方块垒成一个塔,且上面的方块宽度小于下面的方块 3.每个方块只能用一次,可以横着或者竖着. n范围5 ...
- luogu2221 [HAOI2012]高速公路
和sdoi的相关分析很像qwq,推柿子然后线段树搞搞 #include <iostream> #include <cstdio> using namespace std; ty ...
- 树莓派Raspberry Pi 3安装步骤
一.需要的硬件 1.Raspberry Pi 3(Model B+)树莓派.购买>https://item.jd.com/29225467867.html 2.输出5V/2A的电源 3.SD卡( ...
- WIN8、WIN7访问Windows Server 2003服务器的数据库速度很慢、远程速度很慢的解决方法
原因是微软在WIN7开始上加入了网络速度限制.在控制台执行以下命令即可解决: netsh interface tcp set global autotuninglevel=disabled
- 《数据结构与算法分析:C语言描述》复习——第八章“并查集”——并查集
2014.06.18 14:16 简介: “并查集”,英文名为“union-find set”,从名字就能看出来它支持合并与查找功能.另外还有一个名字叫“disjoint set”,中文名叫不相交集合 ...
- python解析复杂json字符串
因为项目需要,公司领导对提出了接口测试的要求,因此作为一个测试人员,我第一时间就想到了jmeter这个利器,前面文章也有说明过怎么用jmeter做http协议的接口测试,这里我不再做讲解,此篇主要讲解 ...