给出的条件是异或类型的方程,可以直接用bitset优化高斯消元。
至于求K,在高斯消元时记录用到的最大的方程的编号即可。
代码:
// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;
#define N 1007
#define M 2007
char s[N];
bitset<N> b[M];
int n,m;
int main()
{
int i,j;
scanf("%d%d",&n,&m);
for(i=;i<=m;i++)
{
scanf("%s",s+);
for(j=;j<=n;j++)
b[i][j]=s[j]-'';
scanf("%s",s);
b[i][n+]=s[]-'';
}
int ans=;
for(i=;i<=n;i++)
{
for(j=i;j<=m&&!b[j][i];j++);
if(j>m)break;
ans=max(ans,j);
swap(b[j],b[i]);
for(j=;j<=m;j++)
if(i!=j&&b[j][i])b[j]^=b[i];
}
if(i<=n)printf("Cannot Determine\n");
else
{
printf("%d\n",ans);
for(i=;i<=n;i++)
{
if(b[i][n+])printf("?y7M#\n");
else printf("Earth\n");
}
}
return ;
}