标签:size containe nss atp center += off nbsp lines
2 0 1 1 0 1 0 1 0 0 1 1 1 0 0 1 0 0 1 1 0 0 1 0 1 0 1 1 1 0 0 0 0 1 0 1 0 1 0 1 0 1 1 0 0 1 0 1 1 1 0 1 1 0 0 0 1 0 1 0 0Sample Output
PUZZLE #1 1 0 1 0 0 1 1 1 0 1 0 1 0 0 1 0 1 1 1 0 0 1 0 0 0 1 0 0 0 0 PUZZLE #2 1 0 0 1 1 1 1 1 0 0 0 0 0 0 0 1 0 0 1 1 0 1 0 1 1 0 1 1 0 1
大佬博客 : https://blog.csdn.net/FromATP/article/details/53966305
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<string> #include<vector> #include<stack> #include<bitset> #include<cstdlib> #include<cmath> #include<set> #include<list> #include<deque> #include<map> #include<queue> using namespace std; typedef long long lint; const double PI = acos(-1.0); const int INF = 1000000000; const int maxn = 100005; // 暴力枚举 : /* int mp[20][20], cal[20][20], vis[20][20]; int n, m; int dr[5][2] = { {0,1}, {0,-1}, {1,0}, {-1,0}, {0,0} }; int mi = INF; int fz(int x, int y) { int t = mp[x][y]; for(int i = 0; i< 5; i++) { int xx = x + dr[i][0]; int yy = y + dr[i][1]; if(xx <= n && xx > 0 && yy <= m && yy >0) t += vis[xx][yy]; } return t%2; } int dfs() { for(int j = 2; j <= n; j++) for(int k = 1; k <= m; k++) { if(fz(j-1, k)) vis[j][k] = 1; } for(int j = 1; j <= m; j++) { if(fz(n, j)) return -1; } int cnt = 0; for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) cnt += vis[i][j]; return cnt; } int main() { ios::sync_with_stdio(false); int T; cin >> T; int ans = 0; while(ans++ < T) { mi = INF; n = 5; m = 6; for(int i = 1; i <=n; i++) for(int j = 1; j <=m ; j++) cin >> mp[i][j]; int flag = 0; for(int i = 0; i < 1<<m ; i++) { memset(vis, 0, sizeof(vis)); for(int j = 1; j <= m; j++) vis[1][m-j+1] = i>>(j-1) & 1; int cnt = dfs(); if(cnt < mi && cnt >= 0) { flag =1; mi = cnt; memcpy(cal, vis, sizeof(vis)); } } cout << "PUZZLE #" << ans << endl; if(flag) { for(int i = 1; i <=n; i++) { for(int j = 1; j <= m; j++) { if(j != 1) cout << " "; cout << cal[i][j]; } cout << endl; } } else cout << "IMPOSSIBLE" << endl; } return 0; } */ // 高斯消元法 : #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int n=30; int tt,a[n+10][n+10]; void gauss()//保证有解 { int r; for(int i=1;i<=n;i++) { for(int j=i;j<=n;j++)if(a[j][i]){r=j;break;} if(r!=i)for(int j=1;j<=n+1;j++) swap(a[i][j],a[r][j]); for(int j=i+1;j<=n;j++)if(a[j][i]) for(int k=i;k<=n+1;k++) a[j][k]^=a[i][k]; } for(int i=n;i>=1;i--) for(int j=i+1;j<=n;j++) if(a[i][j])a[i][n+1]^=a[j][n+1]; } int main() { scanf("%d",&tt); int t=0; while(tt--) { t++; memset(a,0,sizeof(a)); for(int i=1;i<=n;i++) { scanf("%d",&a[i][n+1]); a[i][i]=1; if(i%6!=1)a[i][i-1]=1; if(i%6!=0)a[i][i+1]=1; if(i>6)a[i][i-6]=1; if(i<25)a[i][i+6]=1; } gauss(); printf("PUZZLE #%d\n",t); for(int i=1;i<=n;i++) { if(!(i%6))printf("%d\n",a[i][n+1]); else printf("%d ",a[i][n+1]); } } return 0; }
标签:size containe nss atp center += off nbsp lines
原文地址:https://www.cnblogs.com/mrh-acmer/p/9490671.html