高斯消元 poj-1222、1681、1830、3185,sicily-1048

这几个题目都是翻转之后关联其他点的翻转,并且都是采用的01翻转,实属良心。

另外建立增广矩阵真的很费劲

  poj 1222 
 
 
  1. #include<iostream> 
  2. #include<cstring> 
  3. #include <algorithm> 
  4. #include<cstdlib> 
  5. #include<vector> 
  6. #include<cmath> 
  7. #include<stdlib.h> 
  8. #include<iomanip> 
  9. #include<list> 
  10. #include<deque> 
  11. #include<map> 
  12. #include <stdio.h> 
  13. #include <queue> 
  14.  
  15. const int maxn=1000+5
  16.  
  17. #define inf 0x3f3f3f3f 
  18.   #define INF 0x3FFFFFFFFFFFFFFFLL 
  19. #define rep(i,n) for(i=0;i<n;i++) 
  20.  #define reP(i,n) for(i=1;i<=n;i++) 
  21.  
  22. #define ull unsigned long long 
  23.  #define ll long long 
  24.  
  25. #define cle(a) memset(a,0,sizeof(a)) 
  26.  
  27. using namespace std; 
  28. //对2取模的01方程组 
  29.  
  30. const int MAXN = 40
  31. //有equ个方程,var个变元。增广矩阵行数为equ,列数为var+1,分别为0到var 
  32. int equ,var;//方程数和变量数,注意对其赋值 
  33. int a[MAXN][MAXN]; //增广矩阵 
  34. //增广矩阵:在系数矩阵的右边添上一列,这一列是线性方程组的等号右边的值。 
  35. int x[MAXN]; //解集 
  36. int free_x[MAXN];//用来存储自由变元(多解枚举自由变元可以使用) 
  37. int free_num;//自由变元的个数 
  38. void init(){//初始化 
  39.     cle(a),cle(x),cle(free_x); 
  40. //返回值为-1表示无解,为0是唯一解,否则返回自由变元个数 
  41. void out(){ 
  42.     int i,j; 
  43.     rep(i,20){ 
  44.         rep(j,21){ 
  45.             cout<<a[i][j]<<" "
  46.         } 
  47.         cout<<endl; 
  48.     } 
  49.     cout<<"_____bug______"<<endl; 
  50. int ans[MAXN]; 
  51. int now; 
  52.  
  53. int dfs(int v) 
  54.     int i,j; 
  55.     int cop_a[MAXN][MAXN]; 
  56.     if(v==0){ 
  57.         int tt=0
  58.         for(i=0;i<20;i++){ 
  59.             x[i]=ans[i]; 
  60.         } 
  61.         memcpy(cop_a,a,sizeof(a)); 
  62.         for(i=now-1;i>=0;i--){ 
  63.             for(j=i;j<var;j++){ 
  64.                 cop_a[i][20]^=(x[j]&cop_a[i][j]); 
  65.             } 
  66.             x[i]^=cop_a[i][20]; 
  67.         } 
  68.         rep(i,20)tt+=x[i]; 
  69.         return tt; 
  70.     } 
  71.     else
  72.         ans[free_x[v-1]]=0
  73.         int tt=dfs(v-1); 
  74.         ans[free_x[v-1]]=1
  75.         tt=min(tt,dfs(v-1)); 
  76.         return tt; 
  77.     } 
  78. int Gauss() { 
  79.     int max_r,col,k; 
  80.     free_num = 0
  81.     for(k = 0, col = 0 ; k <equ&& col <var ; k++, col++) { 
  82.         max_r = k; 
  83.         for(int i = k+1; i<equ; i++) { 
  84.             if(abs(a[i][col]) > abs(a[max_r][col])) 
  85.                 max_r = i; 
  86.         } 
  87.         if(a[max_r][col] == 0) { 
  88.             k--; 
  89.             free_x[free_num++] = col;//这个是自由变元 
  90.             continue
  91.         } 
  92.         if(max_r != k) { 
  93.             for(int j = col; j < var+1; j++) 
  94.                 swap(a[k][j],a[max_r][j]); 
  95.         } 
  96.         for(int i = k+1; i<equ; i++) { 
  97.             if(a[i][col] != 0) { 
  98.                 for(int j = col; j < var+1; j++) 
  99.                     a[i][j] ^= a[k][j]; 
  100.             } 
  101.         } 
  102.     } 
  103.     now=k; 
  104. //    cout<<k<<":"<<var<<endl; 
  105.     for(int i = k; i<equ; i++) 
  106.         if(a[i][col] != 0
  107.             return -1;//无解 
  108.     if(k<var)  
  109.         //自由变元个数 
  110.     { 
  111.         int tt; 
  112.         tt=dfs(var-k); 
  113.         now=k; 
  114.         cout<<tt<<endl; 
  115.         return -1
  116.     } 
  117.     //唯一解,回代 
  118.    else
  119.        for(int i = var-1; i>= 0; i--) { 
  120.         x[i] = a[i][var]; 
  121.         for(int j = i+1; j <var; j++) 
  122.             x[i] ^= (a[i][j] && x[j]); 
  123.        } 
  124.    } 
  125.     return 0
  126. int main() 
  127. #ifndef ONLINE_JUDGE 
  128.      freopen("in.txt","r",stdin); 
  129.      //freopen("out.txt","w",stdout); 
  130. #endif 
  131.     int n;init(); 
  132.     while(cin>>a[0][20]){ 
  133.         int i; 
  134.         for(i=1;i<=19;i++){ 
  135.             scanf("%d",&a[i][20]); 
  136.         } 
  137.         equ=var=20
  138.         rep(i,20){ 
  139.             a[i][i]=1
  140.             if(i-1>=0)a[i][i-1]=1
  141.             if(i+1<20)a[i][i+1]=1
  142.         } 
  143.         int ans=Gauss(); 
  144.         if(ans==0){ 
  145.             rep(i,20){ 
  146.             ans+=x[i]; 
  147.          } 
  148.             cout<<ans<<endl; 
  149.  
  150.         }init(); 
  151.     } 
  152.     return 0
  153. }
  poj 1681
 
 
  1.    #include<iostream> 
  2. #include<cstring> 
  3. #include <algorithm> 
  4. #include<cstdlib> 
  5. #include<vector> 
  6. #include<cmath> 
  7. #include<stdlib.h> 
  8. #include<iomanip> 
  9. #include<list> 
  10. #include<deque> 
  11. #include<map> 
  12. #include <stdio.h> 
  13. #include <queue> 
  14.  
  15. const int maxn=1000+5
  16.  
  17. #define inf 0x3f3f3f3f 
  18.   #define INF 0x3FFFFFFFFFFFFFFFLL 
  19. #define rep(i,n) for(i=0;i<n;i++) 
  20.  #define reP(i,n) for(i=1;i<=n;i++) 
  21.  
  22. #define ull unsigned long long 
  23.  #define ll long long 
  24.  
  25. #define cle(a) memset(a,0,sizeof(a)) 
  26.  
  27. using namespace std; 
  28. const int MAXN = 250
  29. //有equ个方程,var个变元。增广矩阵行数为equ,列数为var+1,分别为0到var 
  30. int equ,var;//注意对其赋值 
  31. int a[MAXN][MAXN]; //增广矩阵 
  32. //增广矩阵:在系数矩阵的右边添上一列,这一列是线性方程组的等号右边的值。 
  33. int x[MAXN]; //解集 
  34. int free_x[MAXN];//用来存储自由变元(多解枚举自由变元可以使用) 
  35. int free_num;//自由变元的个数 
  36. void init(){//初始化 
  37. cle(a),cle(x),cle(free_x); 
  38. int n; 
  39. int dir[4][2]={1,0,-1,0,0,1,0,-1}; 
  40. int getbool(int x,int y){ 
  41.     if(x<0||y<0||x>=n||y>=n)return 0
  42.     return 1
  43. void getcon(int x,int y){ 
  44.     int newx,newy; 
  45.     int i; 
  46.     rep(i,4){ 
  47.         newx=x+dir[i][0],newy=y+dir[i][1]; 
  48.         if(getbool(newx,newy)){ 
  49.             a[x*n+y][newx*n+newy]=1
  50.         } 
  51.     } 
  52. void out(){ 
  53.     int i,j; 
  54.     rep(i,n*n){ 
  55.         rep(j,n*n+1){ 
  56.             cout<<a[i][j]<<" "
  57.         } 
  58.         cout<<endl; 
  59.     } 
  60. //返回值为-1表示无解,为0是唯一解,否则返回自由变元个数 
  61. int Gauss() { 
  62.     int max_r,col,k; 
  63.     free_num = 0
  64.     for(k = 0, col = 0 ; k <equ&& col <var ; k++, col++) { 
  65.         max_r = k; 
  66.         for(int i = k+1; i<equ; i++) { 
  67.             if(abs(a[i][col]) > abs(a[max_r][col])) 
  68.                 max_r = i; 
  69.         } 
  70.         if(a[max_r][col] == 0) { 
  71.             k--; 
  72.             free_x[free_num++] = col;//这个是自由变元 
  73.             continue
  74.         } 
  75.         if(max_r != k) { 
  76.             for(int j = col; j < var+1; j++) 
  77.                 swap(a[k][j],a[max_r][j]); 
  78.         } 
  79.         for(int i = k+1; i<equ; i++) { 
  80.             if(a[i][col] != 0) { 
  81.                 for(int j = col; j < var+1; j++) 
  82.                     a[i][j] ^= a[k][j]; 
  83.             } 
  84.         } 
  85.     } 
  86.     for(int i = k; i<equ; i++) 
  87.         if(a[i][col] != 0
  88.             return -1;//无解 
  89.    // if(k <var) return var-k;//自由变元个数 
  90.     //唯一解,回代 
  91.     for(int i = var-1; i>= 0; i--) { 
  92.         x[i] = a[i][var]; 
  93.         for(int j = i+1; j <var; j++) 
  94.             x[i] ^= (a[i][j] && x[j]); 
  95.     } 
  96.     return 0
  97. int main() 
  98. #ifndef ONLINE_JUDGE 
  99.      freopen("in.txt","r",stdin); 
  100.      //freopen("out.txt","w",stdout); 
  101. #endif 
  102.     int T; 
  103.     cin>>T; 
  104.     while(T--){ 
  105.         cin>>n; 
  106.         init(); 
  107.         equ=var=n*n; 
  108.         int i,j; 
  109.         for(i=0;i<n*n;i++){ 
  110.             char c; 
  111.             cin>>c; 
  112.             if(c=='w')
  113.                 a[i][n*n]=1
  114.             } 
  115.         } 
  116.         for(i=0;i<n;i++){ 
  117.             for(j=0;j<n;j++){ 
  118.                 a[i*n+j][i*n+j]=1
  119.                 getcon(i,j); 
  120.             } 
  121.         } 
  122.         //out(); 
  123.         int ans=Gauss(); 
  124.         if(ans==0){ 
  125.             int sum=0
  126.             rep(i,n*n){ 
  127.                 sum+=x[i]; 
  128.             } 
  129.             cout<<sum<<endl; 
  130.         } 
  131.         else if(ans==-1){ 
  132.             cout<<"inf"<<endl; 
  133.         } 
  134.     } 
  135.     return 0
  136. }
   poj 1830
 
 
  1. #include<iostream> 
  2. #include<cstring> 
  3. #include <algorithm> 
  4. #include<cstdlib> 
  5. #include<vector> 
  6. #include<cmath> 
  7. #include<stdlib.h> 
  8. #include<iomanip> 
  9. #include<list> 
  10. #include<deque> 
  11. #include<map> 
  12. #include <stdio.h> 
  13. #include <queue> 
  14.  
  15. const int maxn=1000+5
  16.  
  17. #define inf 0x3f3f3f3f 
  18.   #define INF 0x3FFFFFFFFFFFFFFFLL 
  19. #define rep(i,n) for(i=0;i<n;i++) 
  20.  #define reP(i,n) for(i=1;i<=n;i++) 
  21.  
  22. #define ull unsigned long long 
  23.  #define ll long long 
  24.  
  25. #define cle(a) memset(a,0,sizeof(a)) 
  26.  
  27. using namespace std; 
  28. const int MAXN = 910
  29. //有equ个方程,var个变元。增广矩阵行数为equ,列数为var+1,分别为0到var 
  30. int equ,var;//注意对其赋值 
  31. int a[MAXN][MAXN]; //增广矩阵 
  32. //增广矩阵:在系数矩阵的右边添上一列,这一列是线性方程组的等号右边的值。 
  33. int x[MAXN]; //解集 
  34. int free_x[MAXN];//用来存储自由变元(多解枚举自由变元可以使用) 
  35. int free_num;//自由变元的个数 
  36. void init(){//初始化 
  37.     cle(a),cle(x),cle(free_x); 
  38. int n; 
  39. void out(){ 
  40.     int i,j; 
  41.     rep(i,n){ 
  42.         rep(j,n+1){ 
  43.             cout<<a[i][j]<<" "
  44.         } 
  45.         cout<<endl; 
  46.     } 
  47. //返回值为-1表示无解,为0是唯一解,否则返回自由变元个数 
  48. int Gauss() { 
  49.     int max_r,col,k; 
  50.     free_num = 0
  51.     for(k = 0, col = 0 ; k <equ&& col <var ; k++, col++) { 
  52.         max_r = k; 
  53.         for(int i = k+1; i<equ; i++) { 
  54.             if(abs(a[i][col]) > abs(a[max_r][col])) 
  55.                 max_r = i; 
  56.         } 
  57.         if(a[max_r][col] == 0) { 
  58.             k--; 
  59.             free_x[free_num++] = col;//这个是自由变元 
  60.             continue
  61.         } 
  62.         if(max_r != k) { 
  63.             for(int j = col; j < var+1; j++) 
  64.                 swap(a[k][j],a[max_r][j]); 
  65.         } 
  66.         for(int i = k+1; i<equ; i++) { 
  67.             if(a[i][col] != 0) { 
  68.                 for(int j = col; j < var+1; j++) 
  69.                     a[i][j] ^= a[k][j]; 
  70.             } 
  71.         } 
  72.     } 
  73.     for(int i = k; i<equ; i++) 
  74.         if(a[i][col] != 0
  75.             return -1;//无解 
  76.     if(k <var) 
  77.         return var-k;//自由变元个数 
  78.     //唯一解,回代 
  79.     for(int i = var-1; i>= 0; i--) { 
  80.         x[i] = a[i][var]; 
  81.         for(int j = i+1; j <var; j++) 
  82.             x[i] ^= (a[i][j] && x[j]); 
  83.     } 
  84.     return 0
  85. int main() 
  86. #ifndef ONLINE_JUDGE 
  87.      freopen("in.txt","r",stdin); 
  88.      //freopen("out.txt","w",stdout); 
  89. #endif 
  90.     int T; 
  91.     cin>>T; 
  92.     while(T--){ 
  93.         cin>>n; 
  94.         equ=var=n; 
  95.         int i,j; 
  96.         int be[maxn]; 
  97.         int en[maxn]; 
  98.         rep(i,n){ 
  99.             cin>>be[i]; 
  100.         } 
  101.         init(); 
  102.         rep(i,n){ 
  103.             cin>>en[i]; 
  104.             if(be[i]!=en[i]){ 
  105.                 a[i][n]=1
  106.             } 
  107.         } 
  108.         int x,y; 
  109.         while(cin>>x>>y){ 
  110.             if(x==0&&y==0){ 
  111.                 break
  112.             } 
  113.             a[y-1][x-1]=1
  114.         } 
  115.         rep(i,n)a[i][i]=1
  116.         int ans=Gauss(); 
  117.        // cout<<ans<<endl; 
  118.         if(ans==-1){ 
  119.             cout<<"Oh,it's impossible~!!"<<endl; 
  120.         } 
  121.         else
  122.             cout<<(1<<ans)<<endl; 
  123.         } 
  124.     } 
  125.     return 0
  126. }
       poj 3185

  1. #include<iostream> 
  2. #include<cstring> 
  3. #include <algorithm> 
  4. #include<cstdlib> 
  5. #include<vector> 
  6. #include<cmath> 
  7. #include<stdlib.h> 
  8. #include<iomanip> 
  9. #include<list> 
  10. #include<deque> 
  11. #include<map> 
  12. #include <stdio.h> 
  13. #include <queue> 
  14.  
  15. const int maxn=1000+5
  16.  
  17. #define inf 0x3f3f3f3f 
  18.   #define INF 0x3FFFFFFFFFFFFFFFLL 
  19. #define rep(i,n) for(i=0;i<n;i++) 
  20.  #define reP(i,n) for(i=1;i<=n;i++) 
  21.  
  22. #define ull unsigned long long 
  23.  #define ll long long 
  24.  
  25. #define cle(a) memset(a,0,sizeof(a)) 
  26.  
  27. using namespace std; 
  28. //对2取模的01方程组 
  29.  
  30. const int MAXN = 40
  31. //有equ个方程,var个变元。增广矩阵行数为equ,列数为var+1,分别为0到var 
  32. int equ,var;//方程数和变量数,注意对其赋值 
  33. int a[MAXN][MAXN]; //增广矩阵 
  34. //增广矩阵:在系数矩阵的右边添上一列,这一列是线性方程组的等号右边的值。 
  35. int x[MAXN]; //解集 
  36. int free_x[MAXN];//用来存储自由变元(多解枚举自由变元可以使用) 
  37. int free_num;//自由变元的个数 
  38. void init(){//初始化 
  39.     cle(a),cle(x),cle(free_x); 
  40. //返回值为-1表示无解,为0是唯一解,否则返回自由变元个数 
  41. void out(){ 
  42.     int i,j; 
  43.     rep(i,20){ 
  44.         rep(j,21){ 
  45.             cout<<a[i][j]<<" "
  46.         } 
  47.         cout<<endl; 
  48.     } 
  49.     cout<<"_____bug______"<<endl; 
  50. int ans[MAXN]; 
  51. int now; 
  52.  
  53. int dfs(int v) 
  54.     int i,j; 
  55.     int cop_a[MAXN][MAXN]; 
  56.     if(v==0){ 
  57.         int tt=0
  58.         for(i=0;i<20;i++){ 
  59.             x[i]=ans[i]; 
  60.         } 
  61.         memcpy(cop_a,a,sizeof(a)); 
  62.         for(i=now-1;i>=0;i--){ 
  63.             for(j=i;j<var;j++){ 
  64.                 cop_a[i][20]^=(x[j]&cop_a[i][j]); 
  65.             } 
  66.             x[i]^=cop_a[i][20]; 
  67.         } 
  68.         rep(i,20)tt+=x[i]; 
  69.         return tt; 
  70.     } 
  71.     else
  72.         ans[free_x[v-1]]=0
  73.         int tt=dfs(v-1); 
  74.         ans[free_x[v-1]]=1
  75.         tt=min(tt,dfs(v-1)); 
  76.         return tt; 
  77.     } 
  78. int Gauss() { 
  79.     int max_r,col,k; 
  80.     free_num = 0
  81.     for(k = 0, col = 0 ; k <equ&& col <var ; k++, col++) { 
  82.         max_r = k; 
  83.         for(int i = k+1; i<equ; i++) { 
  84.             if(abs(a[i][col]) > abs(a[max_r][col])) 
  85.                 max_r = i; 
  86.         } 
  87.         if(a[max_r][col] == 0) { 
  88.             k--; 
  89.             free_x[free_num++] = col;//这个是自由变元 
  90.             continue
  91.         } 
  92.         if(max_r != k) { 
  93.             for(int j = col; j < var+1; j++) 
  94.                 swap(a[k][j],a[max_r][j]); 
  95.         } 
  96.         for(int i = k+1; i<equ; i++) { 
  97.             if(a[i][col] != 0) { 
  98.                 for(int j = col; j < var+1; j++) 
  99.                     a[i][j] ^= a[k][j]; 
  100.             } 
  101.         } 
  102.     } 
  103.     now=k; 
  104. //    cout<<k<<":"<<var<<endl; 
  105.     for(int i = k; i<equ; i++) 
  106.         if(a[i][col] != 0
  107.             return -1;//无解 
  108.     if(k<var)  
  109.         //自由变元个数 
  110.     { 
  111.         int tt; 
  112.         tt=dfs(var-k); 
  113.         now=k; 
  114.         cout<<tt<<endl; 
  115.         return -1
  116.     } 
  117.     //唯一解,回代 
  118.    else
  119.        for(int i = var-1; i>= 0; i--) { 
  120.         x[i] = a[i][var]; 
  121.         for(int j = i+1; j <var; j++) 
  122.             x[i] ^= (a[i][j] && x[j]); 
  123.        } 
  124.    } 
  125.     return 0
  126. int main() 
  127. #ifndef ONLINE_JUDGE 
  128.      freopen("in.txt","r",stdin); 
  129.      //freopen("out.txt","w",stdout); 
  130. #endif 
  131.     int n;init(); 
  132.     while(cin>>a[0][20]){ 
  133.         int i; 
  134.         for(i=1;i<=19;i++){ 
  135.             scanf("%d",&a[i][20]); 
  136.         } 
  137.         equ=var=20
  138.         rep(i,20){ 
  139.             a[i][i]=1
  140.             if(i-1>=0)a[i][i-1]=1
  141.             if(i+1<20)a[i][i+1]=1
  142.         } 
  143.         int ans=Gauss(); 
  144.         if(ans==0){ 
  145.             rep(i,20){ 
  146.             ans+=x[i]; 
  147.          } 
  148.             cout<<ans<<endl; 
  149.  
  150.         }init(); 
  151.     } 
  152.     return 0
  153. }
     sicily 1048 是找的题目给大二小朋友做搜索的,结果意外发现可以用高斯定理,然后就给顺带A了
 
 
  1. // Problem#: 1048 
  2. // Submission#: 3258134 
  3. // The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License 
  4. // URI: http://creativecommons.org/licenses/by-nc-sa/3.0/ 
  5. // All Copyright reserved by Informatic Lab of Sun Yat-sen University 
  6. /************************************************************************* 
  7.     > File Name: 3.cpp 
  8.     > Author: cy 
  9.     > Mail: 1002@qq.com  
  10.     > Created Time: 14/11/23 14:23:15 
  11.  ************************************************************************/ 
  12.  
  13. #include<iostream> 
  14. #include<cstring> 
  15. #include <algorithm> 
  16. #include<cstdlib> 
  17. #include<vector> 
  18. #include<cmath> 
  19. #include<stdlib.h> 
  20. #include<iomanip> 
  21. #include<list> 
  22. #include<deque> 
  23. #include<map> 
  24. #include <queue> 
  25.  
  26. const int maxn=1000+5
  27.  
  28. #define inf 0x3f3f3f3f 
  29.   #define INF 0x3FFFFFFFFFFFFFFFLL 
  30. #define rep(i,n) for(i=0;i<n;i++) 
  31.  #define reP(i,n) for(i=1;i<=n;i++) 
  32.  
  33. #define ull unsigned long long 
  34.  #define ll long long 
  35.  
  36. #define cle(a) memset(a,0,sizeof(a)) 
  37.  
  38. using namespace std; 
  39. const int MAXN = 40
  40. //有equ个方程,var个变元。增广矩阵行数为equ,列数为var+1,分别为0到var 
  41. int equ,var;//方程数和变量数,注意对其赋值 
  42. int a[MAXN][MAXN]; //增广矩阵 
  43. //增广矩阵:在系数矩阵的右边添上一列,这一列是线性方程组的等号右边的值。 
  44. int x[MAXN]; //解集 
  45. int free_x[MAXN];//用来存储自由变元(多解枚举自由变元可以使用) 
  46. int free_num;//自由变元的个数 
  47. void init(){//初始化 
  48.     cle(a),cle(x),cle(free_x); 
  49.         equ=var=9
  50. //返回值为-1表示无解,为0是唯一解,否则返回自由变元个数 
  51. void out(){ 
  52.     int i,j; 
  53.     rep(i,9){ 
  54.         rep(j,10){ 
  55.             cout<<a[i][j]<<" "
  56.         } 
  57.         cout<<endl; 
  58.     } 
  59.     cout<<"_____bug______"<<endl; 
  60. int ans[MAXN]; 
  61. int now; 
  62.  
  63. int Gauss() { 
  64.     int max_r,col,k; 
  65.     free_num = 0
  66.     for(k = 0, col = 0 ; k <equ&& col <var ; k++, col++) { 
  67.         max_r = k; 
  68.         for(int i = k+1; i<equ; i++) { 
  69.             if(abs(a[i][col]) > abs(a[max_r][col])) 
  70.                 max_r = i; 
  71.         } 
  72.         if(a[max_r][col] == 0) { 
  73.             k--; 
  74.             free_x[free_num++] = col;//这个是自由变元 
  75.             continue
  76.         } 
  77.         if(max_r != k) { 
  78.             for(int j = col; j < var+1; j++) 
  79.                 swap(a[k][j],a[max_r][j]); 
  80.         } 
  81.         for(int i = k+1; i<equ; i++) { 
  82.             if(a[i][col] != 0) { 
  83.                 for(int j = col; j < var+1; j++) 
  84.                     a[i][j] ^= a[k][j]; 
  85.             } 
  86.         } 
  87.     } 
  88.     now=k; 
  89. //  cout<<k<<":"<<var<<endl; 
  90.     for(int i = k; i<equ; i++) 
  91.         if(a[i][col] != 0
  92.             return -1;//无解 
  93.     if(k<var)  
  94.         //自由变元个数 
  95.     { 
  96.         int tt; 
  97.         tt=dfs(var-k); 
  98.         now=k; 
  99.         cout<<tt<<endl; 
  100.         return -1
  101.     } 
  102.     //唯一解,回代 
  103.    else
  104.        for(int i = var-1; i>= 0; i--) { 
  105.         x[i] = a[i][var]; 
  106.         for(int j = i+1; j <var; j++) 
  107.             x[i] ^= (a[i][j] && x[j]); 
  108.        } 
  109.    } 
  110.     return 0
  111. int dir[8][2]={-1,-1,-1,0,-1,1,0,-1,0,1,1,-1,1,0,1,1}; 
  112. bool getbool(int x,int y){ 
  113.     if(x<0||y<0||x>=3||y>=3)return false
  114.     return true
  115. int main() 
  116.  
  117.     int n; 
  118.     int T; 
  119.     cin>>T; 
  120.  
  121.     while(T--){ 
  122.         init(); 
  123.         int i; 
  124.         int num=0
  125.         for(i=0;i<9;i++){ 
  126.             char c; 
  127.             cin>>c; 
  128.             if(c=='b')num++,a[i][9]=1
  129.         } 
  130.         if(!num){ 
  131.             cout<<11<<endl; 
  132.             continue
  133.         } 
  134.         int j,k; 
  135.         for(i=0;i<3;i++){ 
  136.             rep(j,3){ 
  137.                 a[i*3+j][i*3+j]=1
  138.                 rep(k,8){ 
  139.                     int newx=i+dir[k][0]; 
  140.                     int newy=j+dir[k][1]; 
  141.                     if(getbool(newx,newy)){ 
  142.                         a[i*3+j][newx*3+newy]=1
  143.                     } 
  144.                 } 
  145.             } 
  146.         } 
  147.     //  out(); 
  148.         int ans=Gauss(); 
  149.             rep(i,9){ 
  150.                 if(x[i]){ 
  151.                     cout<<i+1
  152.                 } 
  153.             } 
  154.             cout<<endl; 
  155.     } 
  156.     return 0
  157. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值