p2040打开所有的灯(代码片段)

1129-tangqiyuan 1129-tangqiyuan     2023-03-07     636

关键词:

例如

0  1  1
1  0  0
1  0  1

点一下最中间的灯【2,2】就变成了

0  0  1
0  1  1
1  1  1

再点一下左上角的灯【1,1】就变成了

1  1  1
1  1  1
1  1  1

达成目标。最少需要2步。

输出2即可。

输入输出格式

输入格式:

 

九个数字,3*3的格式输入,每两个数字中间只有一个空格,表示灯初始的开关状态。(0表示关,1表示开)

 

输出格式:

 

1个整数,表示最少打开所有灯所需要的步数。

 

输入输出样例

输入样例#1: 复制
0 1 1
1 0 0
1 0 1
输出样例#1: 复制
2
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a[3] [3];
 4 int b[3][3];
 5 int ans=999999;
 6 int main()
 7     for(int i=0;i<3;i++)
 8         for(int j=0;j<3;j++)
 9             cin>>a[i][j];
10         
11     
12     for(int x=0;x<(1<<9);x++)//枚举所有情况 
13         int cnt=0;
14         memset(b,0,sizeof(b));
15         for(int i=0;i<9;i++)
16             if((x>>i)&1==1)//枚举所有可以改变的地方
17                 cnt++;
18                 int p=i%3,q=i/3;
19                 b[p][q]^=1;
20                 if(p!=0)b[p-1][q]^=1;
21                 if(p!=2)b[p+1][q]^=1;
22                 if(q!=0)b[p][q-1]^=1;
23                 if(q!=2)b[p][q+1]^=1;
24             
25         
26         bool ok=true;
27         for(int i=0;i<3;i++)//比对改变之后是否可行
28             for(int j=0;j<3;j++)
29                 if((a[i][j]^b[i][j])==0)
30                     ok=false;
31                 
32             
33         
34         if(ok==true)
35             ans=min(ans,cnt);
36         
37     
38     cout<<ans;
39 

 

洛谷p2040打开所有的灯

P2040打开所有的灯题目背景pmshz在玩一个益(ruo)智(zhi)的小游戏,目的是打开九盏灯所有的灯,这样的游戏难倒了pmshz。。。题目描述这个灯很奇(fan)怪(ren),点一下就会将这个灯和其周围四盏灯的开关状态全部改变。现在你的任务... 查看详情

luogu2040|打开所有的灯(广搜+状压)(代码片段)

题目背景pmshz在玩一个益(ruo)智(zhi)的小游戏,目的是打开九盏灯所有的灯,这样的游戏难倒了pmshz。。。题目描述这个灯很奇(fan)怪(ren),点一下就会将这个灯和其周围四盏灯的开关状态全部改变。现在你的任务就是就是告诉pmshz... 查看详情

开灯问题(代码片段)

有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后... 查看详情

nyoj77-开灯问题(倍数遍历)(代码片段)

...:24难度:1题目描述:有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共... 查看详情

codeforcesglobalround14e.phoenixandcomputers(组合数,dp)(代码片段)

...=电脑考虑最后的点灯状态,大概是一段连续的灯被手动打开,一个被动打开,一段连续的灯被打开…再单独考虑打开一段连续长kkk的灯是怎么做到的由于不能使任何一盏灯被动打开,唯一的策略是先打开其中的任意一盏灯,之后每... 查看详情

codeforces985b题解(代码片段)

...都是关闭的.按下某开关后,所有与这个开关连接的灯将会打开,已经打开的不会关闭.现在你需要去掉一个开关,使得按下剩余$n-1$个开关后,所有灯都可以打开.若存在方案,则输出YES,否则输出NO.题解直观的想法为,枚举去掉的开关$i$,... 查看详情

python编程训练题2(代码片段)

...ff0c;编号1~n(0<n<100)。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被... 查看详情

p3870[tjoi2009]开关(代码片段)

...号在这个区间内的灯的状态(把开着的灯关上,关着的灯打开),第二种操作是指定一个区间[a,b],要求你输出这个区间内有多少盏灯是打开的。灯在初始时都是关着的。输入输出格式输入格 查看详情

开灯问题(代码片段)

问题描述:有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关,依此类推,一共k个人,问最后有哪些灯开着?  输入n,k,输出... 查看详情

一本通1109开关灯(代码片段)

...(1号)将灯全部关闭,第二个人(2号)将编号为2的倍数的灯打开,第三个人(3号)将编号为3的倍数的灯做相反处理(即将打开的灯关闭,将关闭的灯打开)。依照编号递增顺序,以后的人都和3号一样,将凡是自己编号倍数的灯做相反... 查看详情

开灯问题-----00004

描述有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),第3 个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k... 查看详情

开灯和蛇形

...。开灯问题,有n盏灯,编号为1-n,第一个人把所有的灯都打开,第二个人按下所有编号为2的倍数的开关(这些灯将被关掉),第三个人按下所有编号为3倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),以此类推,一... 查看详情

开灯问题

有n盏灯,编号为1~n,第一个人把所有灯打开,第二个人按下所有编号为2的倍数开关(这些灯将被关掉),第三个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),一次类推,一共有k个人,问最后哪些... 查看详情

前端面试题.......(代码片段)

...简单也最容易想到,可是效率有点低。  letcount=//所有的灯getData:function()letarr=[];for(leti=1;i<=100;i++)arr.push(false);returnarr;,//每个人都去操作自己能够操作的灯泡changeData:function()letarr=this. 查看详情

开灯问题

...nbsp;开灯问题,有n盏灯,编号为1~n。第一个人把所有灯都打开,第二个人按下所有编号为2的倍数的开关(这些灯将被关掉),第三个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),以此类推。... 查看详情

179竞赛

...都是关着的。在k 时刻(k的取值范围是0到n-1),我们打开light[k]这个灯。灯的颜色要想变成蓝色就必须同时满足下面两个条件:灯处于打开状态。排在它之前(左侧)的所有灯也都处于打开状态。请返回能够让所有开着的灯... 查看详情

p1610鸿山洞的灯(代码片段)

?Aimee?很简单的小dfs额其实是套着dfs壳的贪心#include<iostream>#include<cstdio>#include<algorithm>usingnamespacestd;intn,dis;intpl[100001];intans;voiddfs(intnow,intla) if(now==1) dfs(now+1,now); 查看详情

jzoj1321灯(代码片段)

...中玩游戏。但是天不从人愿,突然,牛棚的电源跳闸了,所有的灯都被关闭了。贝希是一个很胆小的女生,在伸手不见拇指的无尽的黑暗中,她感到惊恐,痛苦与绝望。她希望您能够帮帮她,把所有的灯都给重新开起来!她才能... 查看详情