Ò»¸öµÆµÄ²¼¾Ö¿ÉÒÔ¿´³ÉÒ»¸ö0¡¢1¾ØÕó¡£ÒÔ3x3ΪÀý£º
0 1 0
1 1 0
0 1 1
±íʾһ¸ö²¼¾Ö¡£ÆäÖÐ0±íʾµÆÃð£¬1±íʾµÆÁÁ¡£
ÿ´Î°´Ï°´Å¥£¨POJ1222£©»òÕß½ÐÒ»¸öËÞÉá¹ØµÆ£¨0998£©£¬¿ÉÒÔ¿´³ÉÔÚÔ¾ØÕóÉϼӣ¨Ä£2¼Ó£¬¾ÍÊǰ´Î»Òì»ò£©ÉÏÒ»¸öÈçϵľØÕó£º
0 1 0
1 1 1
0 1 0
ÉÏÊö¾ØÕóÖеÄ1±íʾ°´ÏµÚ2ÐеÚ2Áеݴťʱ£¬×÷Óõķ¶Î§¡£Èç¹û°´×óÉϽǵİ´Å¥£¬¾ÍÊÇ£º
1 1 0
1 0 0
0 0 0
ÎÒÃǼÇLΪ´ýÇó½âµÄÔʼ²¼¾Ö¾ØÕó¡£A(i,j)±íʾ°´ÏµÚiÐеÚjÁеݴťʱµÄ×÷Ó÷¶Î§¾ØÕó¡£ÔÚÉÏÊöÀý×ÓÖУ¬
L=
0 1 0
1 1 0
0 1 1
A(1,1)=
1 1 0
1 0 0
0 0 0
A(2,2)=
0 1 0
1 1 1
0 1 0
¼ÙÉèx(i,j)±íʾ£ºÏëҪʹµÃL»Øµ½È«Ãð״̬£¬µÚiÐеÚjÁеİ´Å¥ÊÇ·ñÐèÒª°´Ï¡£0±íʾ²»°´£¬1±íʾ°´Ï¡£ÄÇô£¬Õâ¸öÓÎÏ·¾Íת»¯ÎªÈçÏ·½³ÌµÄÇó½â£º
L + x(1,1)*A(1,1) + x(1,2)*A(1,2) + x(1,3)*A(1,3) + x(2,1)*A(2,1) + ... + x(3,3)*A(3,3) = 0
ÆäÖÐx(i,j)ÊÇδ֪Êý¡£·½³ÌÓұߵÄ0±íʾÁã¾ØÕ󣬱íʾȫÃðµÄ״̬¡£Ö±¹ÛµÄÀí½â¾ÍÊÇ£ºÔÀ´µÄL״̬£¬¾¹ýÁËÈô¸É¸öA(i,j)µÄ±ä»»£¬×îÖÕ±ä³É0:È«Ãð״̬¡£
ÓÉÓÚÊÇ0¡¢1¾ØÕó£¬ÉÏÊö·½³ÌÒ²¿ÉÒÔд³É£º
x(1,1)*A(1,1) + x(1,2)*A(1,2) + x(1,3)*A(1,3) + x(2,1)*A(2,1) + ... + x(3,3)*A(3,3) = L
ÕâÊÇÒ»¸ö¾ØÕ󷽳̡£Á½¸ö¾ØÕóÏàµÈ£¬³äÒªÌõ¼þÊǾØÕóÖÐÿ¸öÔªËØ¶¼ÏàµÈ¡£½«ÉÏÊö·½³ÌÕ¹¿ª£¬±ãת»¯³ÉÁËÒ»¸ö9Ôª1´Î·½³Ì×飺
¼òµ¥µØ¼Ç×ö£ºAA * XX = LL
Õâ¸ö·½³ÌÓÐΨһ½â£º
x(1,1) x(1,2) x(1,3)
x(2,1) x(2,2) x(2,3)
x(3,1) x(3,2) x(3,3)
=
1 1 1
0 0 0
0 0 1
Ò²¾ÍÊÇ˵£¬°´ÏµÚÒ»ÐеÄ3¸ö°´Å¥£¬ºÍÓÒϽǵİ´Å¥£¬¾Í
ÄÜʹL״̬±ä³ÉÈ«Ãð״̬¡£ ¶ÔÓڹ̶¨ÐÐÁеÄÕóÁÐÀ´Ëµ£¬AA¾ØÕóÒ²ÊÇÈ·¶¨µÄ¡£ÊÇ·ñ´æÔڽ⣬½âÊÇ·ñΨһ£¬Ö»ÓëAA¾ØÕóÓйء£¶ÔÓÚΨһ½âµÄÇéÐΣ¬Ö»Òª½«LL³ËÒÔAAµÄÄæ¾ØÕó¼´¿É¡£¾ßÌåÇóAAµÄÄæ¾ØÕóµÄ·½·¨£¬¿ÉÒÔÓøß˹ÏûÔª·¨¡£ ÓÉÓÚÊÇ0¡¢1¾ØÕó£¬ÉÏÊö·½³ÌÒ²¿ÉÒÔд³É£º ½«1ʽÁ½±ßͬʱ¼ÓÉÏÒ»¸öL¾ØÕó¾Í¿ÉÒÔ±ä³É x(1,1)*A(1,1) + x(1,2)*A(1,2) + x(1,3)*A(1,3) + x(2,1)*A(2,1) + ... + x(3,3)*A(3,3) = L A£¨1£¬1£©°Ñ¾ØÕó ת»¯ÎªÒ»¸öÁÐÏòÁ¿£¬LҲת»¯ÎªÒ»¸öÁÐÏòÁ¿£¬ ½«sigma xi*Ai=Li ¶ÔӦλÖõÄÖµÏàµÈ¾Í¿ÉÒÔ½¨Á¢·½³Ì×éÁË X1*A(1,1)1+X2*A(1,2)1+X3*A(1,3)1+¡¡¡¡X30*A(30,30)1=L1; mod 2 X1*A(1,1)2+X2*A(1,2)2+X3*A(1,3)2+¡¡¡¡X30*A(30,30)2=L2; mod 2 X1*A(1,1)3+X2*A(1,2)3+X3*A(1,3)3+¡¡¡¡X30*A(30,30)3=L3 mod 2 ¡¡. ¡¡. ¡¡. X1*A(1,1)30+X2*A(1,2)30+X3*A(1,3)30+¡¡¡¡X30*A(30,30)30=L30; mod 2 ÆäÖÐA(i,j)k ±íʾÁÐÏòÁ¿AÖеÚK¸öÔªËØ ÕâÀïµÄ*±íʾµã³Ë£¬XiÈ¡(1,0) +±íʾģ2¼Ó·¨£¬ËùÒÔÔÚ¸ß˹ÏûÔªµÄʱºò¿ÉÒÔÓÃ^Òì»òÔËËã |
1¸ö¿ª¹Ø×î¶à¿ØÖÆ5¸öµÆ£¬ÔÚ¹¹ÔìµÄ¾ØÕóÖУ¬a[i][j]=1±íʾµÚi¸ö¿ª¹Ø¿ÉÒÔÓ°Ïìµ½jºÅµÆ
¹¹Ôì³öµÄ¾ØÕóÈçͼ£º

²Î¿¼´úÂ룺
#include
#include
using namespace std; int map[32][32]; int ans[32]; void Guass(){ for (int i=0;i<30;i++){ //¿ØÖÆÐÐ if (map[i][i]==0){ for (int j=i+1;j<30;j++){ //ÕÒµ½²»Îª0µÄÄÇÒ»ÐУ¬È»ºó½øÐн»»» if (map[j][i]!=0){ for (int k=i;k<31;k++){ swap(map[j][k],map[i][k]); } break; } } } for (int j=0;j<30;j++){ if (i!=j&&map[j][i]){ for (int k=i;k<31;k++){ map[j][k]=map[i][k]^map[j][k]; } } } } for (int i=0;i<30;i++){ ans[i]=map[i][30]; } } int main(){ int t,kn,km,kx,ky; cin>>t; for (int cas=1;cas<=t;cas++){ for (int i=0;i<30;i++) cin>>map[i][30]; for(int i=0;i<30;i++){ //¹¹Ôì30¸ö·½³Ì kn=i/6; km=i%6; for(int j=0;j<30;j++){ kx=j/6; ky=j%6; if(abs(kx-kn)+abs(ky-km)<=1) map[i][j]=1; else map[i][j]=0; } } Guass(); cout<<"PUZZLE #"<