2 条题解
-
0
#include <bits/stdc++.h> using namespace std; int n,a[35][35]; void gauss() { int r=1; for(int c=1;c<=n;c++) { for(int i=r+1;i<=n;i++) { while(a[i][c]) { //这里没有倍数bs,异或的本质就没有进位的二进制加法 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++; } for(int i=r;i<=n;i++)if(a[i][n+1]==1) {printf("Oh,it's impossible~!!\n");return ;} printf("%d\n",(1<<(n-(r-1)))); } int main() { int T;scanf("%d",&T); while(T--) { scanf("%d",&n); memset(a,0,sizeof(a)); for(int i=1;i<=n;i++ )scanf("%d",&a[i][n+1]); for(int i=1,x;i<=n;i++) { scanf("%d",&x); a[i][n+1]^=x; a[i][i]=1; } int x,y;while(scanf("%d%d",&x,&y)!=EOF && x && y)a[y][x]=1; gauss(); } return 0; } -
0
#include <bits/stdc++.h> using namespace std; int n,a[35][35]; void gauss() { int r=1; for(int c=1;c<=n;c++) { for(int i=r+1;i<=n;i++) { while(a[i][c]) { //这里没有倍数bs,异或的本质就没有进位的二进制加法 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++; } for(int i=r;i<=n;i++)if(a[i][n+1]==1) {printf("Oh,it's impossible~!!\n");return ;} printf("%d\n",( 1<<( n-(r-1) ) )); } int main() { int T;scanf("%d",&T); while(T--) { scanf("%d",&n); memset(a,0,sizeof(a)); for(int i=1;i<=n;i++ )scanf("%d",&a[i][n+1]); for(int i=1,x;i<=n;i++) { scanf("%d",&x); a[i][n+1]^=x; a[i][i]=1; } int x,y;while(scanf("%d%d",&x,&y)!=EOF && x &&y)a[y][x]=1; gauss(); } return 0; }
- 1
信息
- ID
- 409
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 4
- 标签
- 递交数
- 47
- 已通过
- 23
- 上传者