[Gauss]POJ1681 Painter's Problem

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

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

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

  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

时间: 2024-10-23 19:07:56

[Gauss]POJ1681 Painter's Problem的相关文章

Painter&#39;s Problem poj1681 高斯消元法

Painter's Problem Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4420   Accepted: 2143 Description There is a square wall which is made of n*n small square bricks. Some bricks are white while some bricks are yellow. Bob is a painter and

【POJ1681】Painter&#39;s Problem 高斯消元,求最小∑系数的异或方程组

#include <stdio.h> int main() { puts("转载请注明出处[vmurder]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/43483547"); } -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 题意: 多组数据. 有个n*n的正方形,然后你要对某些位置进行操作,使得最后灯的状态都变成y.

POJ 1681 Painter&#39;s Problem (高斯消元)

题目地址:POJ 1681 跟前两题几乎一模一样的...不多说了.高斯消元+自由元枚举. 代码如下: #include <iostream> #include <string.h> #include <math.h> #include <queue> #include <algorithm> #include <stdlib.h> #include <map> #include <set> #include &

POJ 1681 Painter&#39;s Problem (高斯消元)

题目链接 题意: 一个n*n 的木板 ,每个格子 都 可以 染成 白色和黄色,( 一旦我们对也个格子染色 ,他的上下左右 都将改变颜色): 给定一个初始状态 , 求将 所有的 格子 染成黄色 最少需要染几次?  若 不能 染成 输出 inf. 分析: 和1222差不多,唯一的区别是这个题还要求 最短的步数,其实只需要枚举一下最后的x[][]是否为1,即是否需要按下, 由于只有无解或者解唯一,因为按的顺序是没有影响的,所以只要是有解一定唯一,而且最短的情况是每个格子只按一次, 因为按两次以后就变为

POJ 1681 Painter&#39;s Problem 【高斯消元 二进制枚举】

任意门:http://poj.org/problem?id=1681 Painter's Problem Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7667   Accepted: 3624 Description There is a square wall which is made of n*n small square bricks. Some bricks are white while some bric

poj 1681 Painter&amp;#39;s Problem(高斯消元)

http://poj.org/problem? id=1681 求最少经过的步数使得输入的矩阵全变为y. 思路:高斯消元求出自由变元.然后枚举自由变元,求出最优值. 注意依据自由变元求其它解及求最优值的方法. #include <stdio.h> #include <algorithm> #include <set> #include <map> #include <vector> #include <math.h> #include

高斯消元法(Gauss Elimination)【超详解&amp;模板】

高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵.高斯消元法的原理是:若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程组. 所以我们可以用初等行变换把增广矩阵转换为行阶梯阵,然后回代求出方程的解. 1.线性方程组 1)构造增广矩阵,即系数矩阵A增加上常数向量b(A|b) 2)通过以交换行.某行乘以非负常数和两行相加这三种初等变化将原系统转化为更简单的三角形式(triangular form) 注:这里的初等变化可以通过

POJ-1681

Painter's Problem Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4839   Accepted: 2350 Description There is a square wall which is made of n*n small square bricks. Some bricks are white while some bricks are yellow. Bob is a painter and

poj1681--Painter&#39;s Problem(高斯消元问题4)

Painter's Problem Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status Description There is a square wall which is made of n*n small square bricks. Some bricks are white while some bricks are yellow. Bob is a pai