POJ-1222-尺取法,开关灯
来源:互联网 发布:媒体矩阵 是什么意思 编辑:程序博客网 时间:2024/05/16 12:44
题目大意:有一个5*6的网格图,每个格子都是一个灯,按灯的时候会使这个灯周围其余4个灯改变状态,给出初始状态,问最后按灯的结果;
题目解析:先暴力出第一行所有按灯的情况,然后从第一行到第五行,如果i,j是亮的话,只能按i+1,j,最后判断最后一行是否全为暗的即可;
AC代码:
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<cmath>using namespace std;typedef long long ll;const int maxn = 110;int grid[maxn][maxn],ans[maxn][maxn];int dx[4]={-1,1,0,0},dy[4]={0,0,1,-1};int n,t[maxn][maxn],c;void push(int x,int y){ t[x][y]^=1; for(int i=0;i<4;i++) { int u=x+dx[i]; int v=y+dy[i]; if(u<=0||u>5||v<1||v>6) continue; t[u][v]^=1; }}bool ok(){ memcpy(t,grid,sizeof(grid)); for(int i=1;i<=6;i++) { if(ans[1][i]) { push(1,i); } } for(int i=1;i<5;i++) { for(int j=1;j<=6;j++) { if(t[i][j]) { ans[i+1][j]=1; push(i+1,j); } else { ans[i+1][j]=0; } } } for(int i=1;i<=6;i++) { if(t[5][i]==1) return false; } return true;}void solve(){ for(int i=0;i<(1<<6);i++) { for(int j=0;j<6;j++) { if(i&(1<<j)) ans[1][j+1]=1; else ans[1][j+1]=0; } if(ok()) break; } printf("PUZZLE #%d\n",c++); for(int i=1;i<=5;i++) { for(int j=1;j<=6;j++) printf("%d%c",ans[i][j],j==6?'\n':' '); }}int main(){ scanf("%d",&n); c=1; while(n--) { for(int i=1;i<=5;i++) for(int j=1;j<=6;j++) scanf("%d",&grid[i][j]); solve(); } return 0;}
0 0
- POJ-1222-尺取法,开关灯
- POJ 2566 尺取法
- poj 2100 尺取法
- POJ 2566 尺取法
- poj 3061 尺取法
- poj 3061 尺取法
- poj 2566 尺取法
- poj 3061 尺取法
- poj 3320 尺取法
- poj 3320 尺取法
- poj 2566 尺取法
- poj 3061 尺取法
- poj 3320 尺取法
- POJ 3276 尺取法
- POJ 3061 (尺取法)
- poj 3061 尺取法
- POJ 3061 尺取法
- POJ-3279-尺取法
- (转)Android View框架的measure机制
- 哈希索引的缺点(学习笔记)
- JDBC--学习笔记(二)
- 紫书章六例题九 天平 UVA 839(更新二叉树的节点上的值)
- 接口与工厂
- POJ-1222-尺取法,开关灯
- bits/stdc++.h
- 关闭Hadoop时no namenode to stop异常
- 侧滑菜单——SlidingMenu
- 安卓6.0通过URI进行图片分享问题总结
- KMP常用算法模板
- oracle创建存储过程和定时任务
- 题目1081:递推数列
- chmod修改权限