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 |
USACO,chapter 1早前看过,那里给出了一个gifted solution,我复写如下: int i,j,k,A[9],K[][9]={ {1,1,1,1,1,2,1,2,0}, {2,1,2,1,2,1,3,0,3}, {1,1,1,2,1,1,0,2,1}, {2,1,3,1,2,0,2,1,3}, {2,1,2,1,3,1,2,1,2}, {3,1,2,0,2,1,3,1,2}, {1,2,0,1,1,2,1,1,1}, {3,0,3,1,2,1,2,1,2}, {0,2,1,2,1,1,1,1,1}}; int main(){ for(i=0;i<9;i++){ scanf("%d",&k); for(j=0;j<9;j++)A[j]+=K[i][j]*k; } for(i=0;i<9;i++)for(k=A[i]%4;k--;)printf("%d ",i+1); } 不要问为什么,bro只是copy,这里是向大家提供一种思路。 我看了一下留言,有的说枚举搜索,有的说高斯消元,都很不错。 还有个哥们说了句矩阵,我这里推导一下: 从figure中能得到如下方阵 [1,1,0,1,1,0,0,0,0 , 1,1,1,0,0,0,0,0,0 , 0,1,1,0,1,1,0,0,0 , 1,0,0,1,0,0,1,0,0 , 0,1,0,1,1,1,0,1,0 , 0,0,1,0,0,1,0,0,1 , 0,0,0,1,1,0,1,1,0 , 0,0,0,0,0,0,1,1,1 , 0,0,0,0,1,1,0,1,1 ]=C 令最终状态[0 0 0 0 0 0 0 0 0]=O 设输入[3 3 0 2 2 2 2 1 2]=b 所求的即是 (a*C+b)mod 4=O 方程中的a。 (*is Matrix multiply) 而样例中的输出则为 [0 0 0 1 1 0 0 1 1], 带入方程中是满足的(with matlab)。 方程作如下变形 a*C mod 4 + b mod 4 =O a*C mod 4 = -(b mod 4) a*C mod 4 = (-b) mod 4 a*C mod 4 = (4-b) mod 4 (cz:0<=b<4) 设[4...4]=f, a'为a*C=f的解, 设(4-b) mod 4=v, a为a*C=v的解 显然,a为原方程一个特解,原方程的通解为 a+k*a', k为任意实数, 其中a=v*I, a'=f*I I为C的逆阵,这里用软件求出来为: [ -1/5, 3/5, -1/5, 3/5, -1/5, -2/5, -1/5, -2/5, 4/5] [ 2/5, -1/5, 2/5, -1/5, 2/5, -1/5, -3/5, 4/5, -3/5] [ -1/5, 3/5, -1/5, -2/5, -1/5, 3/5, 4/5, -2/5, -1/5] [ 2/5, -1/5, -3/5, -1/5, 2/5, 4/5, 2/5, -1/5, -3/5] [ 2/5, -1/5, 2/5, -1/5, -3/5, -1/5, 2/5, -1/5, 2/5] [ -3/5, -1/5, 2/5, 4/5, 2/5, -1/5, -3/5, -1/5, 2/5] [ -1/5, -2/5, 4/5, 3/5, -1/5, -2/5, -1/5, 3/5, -1/5] [ -3/5, 4/5, -3/5, -1/5, 2/5, -1/5, 2/5, -1/5, 2/5] [ 4/5, -2/5, -1/5, -2/5, -1/5, 3/5, -1/5, 3/5, -1/5] a'求出来为:[ 4/5, 8/5, 4/5, 8/5, 4/5, 8/5, 4/5, 8/5, 4/5] 综上,先求出特解a,我试过,有时候并不是整数,再用通过 a+k*a'寻找一组整数解。 Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator