zoukankan      html  css  js  c++  java
  • POJ 1681 Painter's Problem [高斯消元XOR]

    同上题


    需要判断无解

    需要求最小按几次,正确做法是枚举自由元的所有取值来遍历变量的所有取值取合法的最小值,然而听说数据太弱自由元全0就可以就水过去吧....

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <bitset>
    using namespace std;
    const int N=230;
    inline int read(){
        char c=getchar();int x=0,f=1;
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
        return x*f;
    }
    int n,t;
    bitset<N> a[N];
    void ini(){
        for(int i=1;i<=n;i++) a[i].reset();
    }
    char s[N];
    void Gauss(){
        int now=1;
        for(int i=1;i<=n;i++){
            int j=now;
            while(j<=n&&!a[j][i]) j++;
            if(j==n+1) continue;
            if(now!=j) swap(a[now],a[j]);
            for(int k=1;k<=n;k++) 
                if(k!=now&&a[k][i]) a[k]^=a[now];
            now++;
        }
    }
    int main(){
        freopen("in","r",stdin);
        int T=read();
        while(T--){
            t=read();n=t*t;
            ini();
            for(int i=1;i<=t;i++){
                scanf("%s",s+1);
                for(int j=1;j<=t;j++){
                    int id=(i-1)*t+j;
                    a[id][id]=1;
                    if(i!=1) a[id][id-t]=1;
                    if(i!=t) a[id][id+t]=1;
                    if(j!=1) a[id][id-1]=1;
                    if(j!=t) a[id][id+1]=1;
                    a[id][n+1]=s[j]=='w';
                }
            }
            Gauss();
            int ans=0,flag=0;
            for(int i=1;i<=n;i++){
                if(a[i][n+1]){
                    int f=0; 
                    for(int j=1;j<=n;j++) if(a[i][j]==1) f=1;
                    if(f==0) {flag=1;break;}
                }
                ans+=a[i][n+1];
            }
            if(flag) puts("inf");
            else printf("%d
    ",ans);
        }
    }
  • 相关阅读:
    K好数
    最大最小公倍数
    十六进制转十进制
    利用malloc定义数组
    01字串
    ubuntu 14.04 下jdk和sdk+eclipse 的配置
    Mysql3
    求最大连续子串
    UC笔试
    java实现随机洗牌算法
  • 原文地址:https://www.cnblogs.com/candy99/p/6410266.html
Copyright © 2011-2022 走看看