博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 1222 EXTENDED LIGHTS OUT(位运算+枚举)
阅读量:4314 次
发布时间:2019-06-06

本文共 1547 字,大约阅读时间需要 5 分钟。

http://poj.org/problem?id=1222

题意:给一个确定的5*6放入矩阵。每一个格子都有一个开关和一盏灯,0表示灯没亮,1表示灯亮着。让你输出一个5*6的矩阵ans[i][j],ans[i][j] = 1表示按下开关,ans[i][j] = 0表示不按开关,使最后全部的灯都熄灭。

思路:与http://acm.hdu.edu.cn/showproblem.php?pid=1882类似。在这里找到一种方案输出就可以。但有一个疑惑不解。最后ans[ ][ ]输出的时候每一行里要倒着输出。。。

#include 
#include
#include
#include
#include
#include
#define LL long long#define _LL __int64using namespace std;const int INF = 0x3f3f3f3f;int map[7][7];int sta[7],tmp[7];int ans[7][7];int bit[8] = {1,2,4,8,16,32,64,128};void solve(){ for(int i = 0; i < (1<<6); i++) { memcpy(tmp,sta,sizeof(sta)); memset(ans,0,sizeof(ans)); for(int j = 0; j < 6; j++) { if(bit[j]&i) { ans[0][j] = 1; if(j > 0) tmp[0] ^= bit[j-1]; if(j < 5) tmp[0] ^= bit[j+1]; tmp[0] ^= bit[j]; tmp[1] ^= bit[j]; } } for(int j = 1; j < 5; j++) { for(int k = 0; k < 6; k++) { if(bit[k]&tmp[j-1]) { ans[j][k] = 1; if(k > 0) tmp[j] ^= bit[k-1]; if(k < 5) tmp[j] ^= bit[k+1]; tmp[j] ^= bit[k]; tmp[j+1] ^= bit[k]; } } } if(!tmp[4]) { for(int i = 0; i < 5; i++) { for(int j = 5; j > 0; j--) printf("%d ",ans[i][j]); printf("%d\n",ans[i][0]); } break; } }}int main(){ int test; scanf("%d",&test); int item = 1; while(test--) { memset(sta,0,sizeof(sta)); for(int i = 0; i < 5; i++) { for(int j = 0; j < 6; j++) { scanf("%d",&map[i][j]); if(map[i][j] == 0) sta[i] <<= 1; else sta[i] = (sta[i]<<1)+1; } } printf("PUZZLE #%d\n",item++); solve(); } return 0;}

转载于:https://www.cnblogs.com/hrhguanli/p/5069516.html

你可能感兴趣的文章
HDU 4571 SPFA+DP
查看>>
centos 创建以日期为名的文件夹
查看>>
腾讯的张小龙是一个怎样的人?
查看>>
jxl写入excel实现数据导出功能
查看>>
linux文件目录类命令|--cp指令
查看>>
.net MVC 404错误解决方法
查看>>
linux系统目录结构
查看>>
git
查看>>
btn按钮之间事件相互调用
查看>>
Entity Framework 4.3.1 级联删除
查看>>
codevs 1163:访问艺术馆
查看>>
冲刺Noip2017模拟赛3 解题报告——五十岚芒果酱
查看>>
并查集
查看>>
sessionStorage
查看>>
代码示例_进程
查看>>
Java中关键词之this,super的使用
查看>>
人工智能暑期课程实践项目——智能家居控制(一)
查看>>
前端数据可视化插件(二)图谱
查看>>
kafka web端管理工具 kafka-manager【转发】
查看>>
获取控制台窗口句柄GetConsoleWindow
查看>>