| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
少量测试数据+高斯消元代码搞了一下午QAQ。
#include <cstdio>
#include <memory.h>
#include <cstring>
#include <algorithm>
#define maxn 11
using namespace std;
int Map[maxn][maxn],N=9;
char *line[]={"ABDE","ABC","BCEF","ADG","BDEFH","CFI","DEGH","GHI","EFHI"};
void Init()
{ int i,j;
memset(Map,0,sizeof(Map));
for(j=0;j<N;++j)
for(i=0;i<strlen(line[j]);++i)
Map[line[j][i]-'A'][j]=1;
}
int Free[maxn],ans[maxn];
void GaussSolve()
{ int i,j,k,res=0,r=0;
int x,y;
memset(Free,0,sizeof(Free));
for(i=0;i<N;++i)
{ if(Map[r][i]==0)
{ for(j=r+1;j<N;++j)
if(Map[j][i]>0)
{ for(k=i;k<=N;++k)
swap(Map[r][k],Map[j][k]);
break;
}
}
if(Map[r][i]==0)
{ res++;
continue;
}
for(j=r+1;j<N;++j)
{ if(Map[j][i]>0)
{ x=Map[r][i];
y=Map[j][i];
for(k=i;k<=N;++k)
{ Map[j][k]=Map[j][k]*x-y*Map[r][k];
Map[j][k]=(Map[j][k]%4+4)%4;
}
}
}
Free[i]=1,r++;
}
int temp;
for(i=N-1;i>=0;--i)
{ temp=Map[i][N];
for(j=i+1;j<N;j++)
temp-=Map[i][j]*ans[j];
temp=(temp%4+4)%4;
for(ans[i]=0;ans[i]<=3;++ans[i])
if((ans[i]*Map[i][i]%4+4)%4==temp)
break;
ans[i]%=4;
}
bool flag=0;
for(i=0;i<N;++i)
for(j=0;j<ans[i];++j)
printf(flag==0?"%d":" %d",i+1),flag=1;
puts("");
}
int main()
{ int i,w;
Init();
for(i=0;i<N;++i)
scanf("%d",&w),Map[i][N]=(4-w)%4;
GaussSolve();
return 0;
}
/*
2 1 3
0 1 2
3 1 0
1 2 2 2 4 4 5 5 5 6 6 7 7 8 9
3 3 0
2 2 2
2 1 2
4 5 8 9
0 0 0
0 0 0
0 0 2
3 3 5 5 6 6 7 7 8 8 9 9
*/
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator