POJ 3279
来源:互联网 发布:淘宝客服部门奖罚制度 编辑:程序博客网 时间:2024/06/07 04:01
#include<cstdio>#include<string.h>using namespace std;const int maxn=30;int a[maxn][maxn],b[maxn][maxn],ans[maxn][maxn];int m,n,f;int check(int k){ for(int i=0;i<n;i++) { if(k&(1<<i)) { ans[0][i]=1; b[0][i]^=1; if(1<m)b[1][i]^=1; if(i-1>=0)b[0][i-1]^=1; if(i+1<n)b[0][i+1]^=1; } } for(int i=1;i<m;i++) { for(int j=0;j<n;j++) { if(b[i-1][j]==1) { ans[i][j]=1; b[i][j]^=1; b[i-1][j]^=1; if(i+1<m) b[i+1][j]^=1; if(j+1<n) b[i][j+1]^=1; if(j-1>=0) b[i][j-1]^=1; } } } for(int j=0;j<n;j++) { if(b[m-1][j]==1) return 0; } return 1;}int main(){ int i,j; while(scanf("%d%d",&m,&n)==2) { for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { scanf("%d",&a[i][j]); } } f=0; for(i=0;i<(1<<n);i++) { memcpy(b,a,sizeof(a)); memset(ans,0,sizeof(ans)); if(check(i)) { f=1; for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { if(j==n-1) printf("%d\n",ans[i][j]); else printf("%d ",ans[i][j]); } } break; } } if(!f) printf("IMPOSSIBLE\n"); } return 0;}
改题的想法不错,先考虑第一行的解决方案的种类,对于题目的例子则可以有16中方案 如0 0 0 0\0 0 0 1\0 0 1 0.....等等对于每一种方案,再进行之下的几行的做法.对于题目中说的考虑什么字典序,感觉是个小坑,没有什么考虑也是可以AC的.
然后这个题目很大得学习到了ACM里的位运算和二进制的运算方法和许多的小技巧.
0 0
- poj 3279 poj 1753
- poj 3279
- poj 3279
- 3279POJ
- poj 3279
- POJ 3279
- poj 3279
- poj 3279
- POJ 3279
- 开关问题 POJ 3276 POJ 3279 POJ 1222
- POJ--1002 487-3279
- POJ 1002 487-3279
- POJ 1002 487-3279
- POJ 1002 487-3279
- poj 1002 "487-3279"
- POJ 1002 487-3279
- poj 1002 487-3279
- POJ 2974 487-3279
- 广度优先遍历队列实现
- 机器学习系列(7)_机器学习路线图(附资料)
- pat1009:说反话
- 1099. Build A Binary Search Tree (30) 给定二叉搜索树插值
- 2016春季训练——树状数组
- POJ 3279
- VMware10安装Ubuntu12.04后无法进入图像界面
- 异常:UnicodeEncodeError: 'ascii' codec can't encode characters 处理办法
- [网络流24题][codevs1906]最长递增子序列(dp+isap)
- Ubuntu14.04下opencv3.1.0的配置
- ORACEL 大数据表 加快查询速度方案 总结
- 光通信基础总结----相干接收机
- C语言实现大数据除法
- luaoc.callStaticMethod实现OC和lua的相互调用