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