1 条题解
-
0
by hansang:
#include<bits/stdc++.h> using namespace std; const int N=16; int a[N][N], n, m, b[N][N], c[N][N], a1[N][N]; int dx[5]={0, -1, 1, 0, 0}; int dy[5]={0, 0, 0, -1, 1}; void change(int x, int y){ for(int i=0; i<5; i++){ int tx=x+dx[i], ty=y+dy[i]; if(tx>=1 && tx<=n && ty>=1 && ty<=m){ a[tx][ty]^=1; } } } int main(){ scanf("%d%d", &n, &m); for(int i=1; i<=n; i++) for(int j=1; j<=m; j++){ scanf("%d", &a[i][j]); a1[i][j]=a[i][j]; } int ans=1e9; for(int i1=0; i1<(1<<m); i1++){ memset(b, 0, sizeof(b)); int sum=0; memcpy(a, a1, sizeof(a)); for(int j=1; j<=m; j++) if((1<<(j-1))&i1){ change(1, j); b[1][j]++; sum++; } for(int i=1; i<n; i++){ for(int j=1; j<=m; j++) if(a[i][j]){ change(i+1, j); b[i+1][j]++; sum++; } } bool flag=1; for(int i=1; i<=m; i++) if(a[n][i]){ flag=0; break; } if(ans>sum && flag){ ans=sum; memcpy(c, b, sizeof(b)); } } if(ans==1e9) printf("IMPOSSIBLE\n"); else{ for(int i=1; i<=n; i++){ for(int j=1; j<=m; j++) printf("%d ", c[i][j]); printf("\n"); } } return 0; }
- 1
信息
- ID
- 2633
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 8
- 已通过
- 5
- 上传者