题目P2447 [SDOI2010] 外星千足虫 以下为代码
#include<bits/stdc++.h>
#define MAXX 1005
#define max(a,b) ((a)>(b))?(a):(b)
using namespace std;
/*
显然方程数至少为n
按照未知数的顺序,每次寻找第一条含有该未知数的方程进行操作
*/
int n,m;
int cnt=0;
int a[MAXX<<1][MAXX];
void input()
{
scanf("%d%d",&n,&m);
getchar();
for(int i=1;i<=m;i++)
{
for (int j=1;j<=n;j++)
a[i][j]=getchar()^48;
getchar();//吃空格
a[i][n+1]=getchar()^48;
getchar();//吃\n
}
}
void query()
{
for (int i=1;i<=n;i++)
{
int j=i;
while(!a[j][i]&&j<=m)
++j;
cnt=max(cnt,j);
if (cnt>m)
{
printf("Cannot Determine");
return;
}
if (i!=j)
{
for (int k=1;k<=n+1;k++)
swap(a[i][k],a[j][k]);
}
for (j=1;j<=m;j++)
{
if (j==i||!a[j][i]) continue;
for (int k=1;k<=n+1;k++)
a[j][k]^=a[i][k];
}//消元
}
printf("%d\n",cnt);
for (int i=1;i<=n;i++)
a[i][n+1]?printf("?y7M#\n"):printf("Earth\n");
}
int main()
{
// freopen("exa.txt","r",stdin);
// freopen("res.txt","w",stdout);
input();
query();
}
与一些思路类似的题解对了半天也没看出来是哪里出了问题,对拍也没啥效果