2 条题解
-
0
#include <bits/stdc++.h> using namespace std; const int N=1100; int n,m,a[N<<1][N],x[N]; bool gauss() { int r=1,cur=0; for(int c=1;c<=n;c++) { if(a[r][c])cur=max(cur,r); for(int i=r+1;i<=m;i++) { while(a[i][c]) { if(a[r][c]==0) cur=max(cur,i); for(int j=1;j<=n+1;j++)a[r][j]=a[r][j]^a[i][j]; swap(a[r],a[i]); } } if(a[r][c]!=0)r++; } if(r<=n) return 0; printf("%d\n",cur); for(int i=n;i>=1;i--) { for(int j=i+1;j<=n;j++) a[i][n+1]^=(x[j]*a[i][j]); x[i]=a[i][n+1]; } for(int i=1;i<=n;i++)if(x[i]==0)printf("Earth\n");else printf("?y7M#\n"); return 1; } int main() { scanf("%d%d",&n,&m); bool flag=0; for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++ )scanf("%1d",&a[i][j]); scanf("%d",&a[i][n+1]); } if(!gauss())printf("Cannot Determine\n"); return 0; } -
0
#include <bits/stdc++.h> using namespace std; const int N=1100; int n,m,a[N<<1][N],x[N]; bool gauss() { int r=1,cur=0; for(int c=1;c<=n;c++) { if(a[r][c])cur=max(cur,r); for(int i=r+1;i<=m;i++) { while(a[i][c]) { if(a[r][c]==0) cur=max(cur,i); for(int j=1;j<=n+1;j++)a[r][j]=a[r][j]^a[i][j]; swap(a[r],a[i]); } } if(a[r][c]!=0)r++; } if(r<=n) return 0; printf("%d\n",cur); for(int i=n;i>=1;i--) { for(int j=i+1;j<=n;j++) a[i][n+1]^=(x[j]*a[i][j]); x[i]=a[i][n+1]; } for(int i=1;i<=n;i++)if(x[i]==0)printf("Earth\n");else printf("?y7M#\n"); return 1; } int main() { scanf("%d%d",&n,&m); bool flag=0; for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++ )scanf("%1d",&a[i][j]); scanf("%d",&a[i][n+1]); } if(!gauss())printf("Cannot Determine\n"); return 0; }
- 1
信息
- ID
- 3588
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 21
- 已通过
- 7
- 上传者