码迷,mamicode.com
首页 > 其他好文 > 详细

[Gauss]POJ1681 Painter's Problem

时间:2014-12-11 00:07:21      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   sp   for   

和POJ1222(http://www.cnblogs.com/Empress/p/4156234.html)完全相同

题意也类似, 可以涂自己以及上下左右五个位置的颜色

问几次能全部涂色 不能输出inf

 

bubuko.com,布布扣
  1 #include <cstdio>
  2 #include <cstdlib>
  3 #include <cstring>
  4 #include <climits>
  5 #include <cctype>
  6 #include <cmath>
  7 #include <string>
  8 #include <sstream>
  9 #include <iostream>
 10 #include <algorithm>
 11 #include <iomanip>
 12 using namespace std;
 13 #include <queue>
 14 #include <stack>
 15 #include <vector>
 16 #include <deque>
 17 #include <set>
 18 #include <map>
 19 typedef long long LL;
 20 typedef long double LD;
 21 const double pi=acos(-1.0);
 22 const double eps=1e-9;
 23 #define INF 0x3f3f3f
 24 #define lson l, m, rt<<1
 25 #define rson m+1, r, rt<<1|1
 26 typedef pair<int, int> PI;
 27 typedef pair<int, PI > PP;
 28 #ifdef _WIN32
 29 #define LLD "%I64d"
 30 #else
 31 #define LLD "%lld"
 32 #endif
 33 //#pragma comment(linker, "/STACK:1024000000,1024000000")
 34 //LL quick(LL a, LL b){LL ans=1;while(b){if(b & 1)ans*=a;a=a*a;b>>=1;}return ans;}
 35 //inline int read(){char ch=‘ ‘;int ans=0;while(ch<‘0‘ || ch>‘9‘)ch=getchar();while(ch<=‘9‘ && ch>=‘0‘){ans=ans*10+ch-‘0‘;ch=getchar();}return ans;}
 36 //inline void print(LL x){printf(LLD, x);puts("");}
 37 //inline void read(LL &ret){char c;int sgn;LL bit=0.1;if(c=getchar(),c==EOF) return ;while(c!=‘-‘&&c!=‘.‘&&(c<‘0‘||c>‘9‘)) c=getchar();sgn=(c==‘-‘)?-1:1;ret=(c==‘-‘)?0:(c-‘0‘);while(c=getchar(),c>=‘0‘&&c<=‘9‘) ret=ret*10+(c-‘0‘);if(c==‘ ‘||c==‘\n‘){ ret*=sgn; return ; }while(c=getchar(),c>=‘0‘&&c<=‘9‘) ret+=(c-‘0‘)*bit,bit/=10;ret*=sgn;}
 38 
 39 char mp[20][20];
 40 int a[250][250], x[250];
 41 int n;
 42 bool Gauss()
 43 {
 44     int k, col;
 45     for(k=0, col=0;k<n*n && col<n*n;k++, col++)
 46     {
 47         int maxr=k;
 48         for(int i=k+1;i<n*n;i++)
 49             if(abs(a[i][col])>abs(a[maxr][col]))
 50                 maxr=i;
 51         if(k!=maxr)
 52             for(int j=col;j<=n*n;j++)
 53                 swap(a[k][j], a[maxr][j]);
 54         if(a[k][col]==0)
 55         {
 56             k--;
 57             continue;
 58         }
 59         for(int i=k+1;i<n*n;i++)
 60             if(a[i][col])
 61                 for(int j=col;j<=n*n;j++)
 62                     a[i][j]^=a[k][j];
 63     }
 64     for(int i=k;i<n*n;i++)
 65         if(a[i][col])
 66             return false;
 67     for(int i=n*n-1;i>=0;i--)
 68     {
 69         x[i]=a[i][n*n];
 70         for(int j=i+1;j<n*n;j++)
 71             x[i]^=(a[i][j] && x[j]);
 72     }
 73     return true;
 74 }
 75 int main()
 76 {
 77     int t;
 78     scanf("%d", &t);
 79     while(t--)
 80     {
 81         scanf("%d", &n);
 82         for(int i=0;i<n;i++)
 83             for(int j=0;j<n;j++)
 84                 cin>>mp[i][j];
 85         memset(a, 0, sizeof(a));
 86         for(int i=0;i<n;i++)
 87             for(int j=0;j<n;j++)
 88             {
 89                 int t=i*n+j;
 90                 a[t][t]=1;
 91                 if(i>0)
 92                     a[(i-1)*n+j][t]=1;
 93                 if(i<n-1)
 94                     a[(i+1)*n+j][t]=1;
 95                 if(j>0)
 96                     a[i*n+j-1][t]=1;
 97                 if(j<n-1)
 98                     a[i*n+j+1][t]=1;
 99                 if(mp[i][j]==y)
100                     a[t][n*n]=0;
101                 else
102                     a[t][n*n]=1;
103             }
104         if(Gauss())
105         {
106             int ans=0;
107             for(int i=0;i<n*n;i++)
108                 if(x[i]==1)
109                     ans++;
110            printf("%d\n", ans);
111         }
112         else
113             printf("inf\n");
114     }
115     return 0;
116 }
POJ 1681

 

[Gauss]POJ1681 Painter's Problem

标签:style   blog   http   io   ar   color   os   sp   for   

原文地址:http://www.cnblogs.com/Empress/p/4156490.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!