• [HEOI2015] 小Z的房间


    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    const int N = 105;
    const int mod = 1e+9;
    namespace mat {
    int a[N][N];
    int n,p=1;
    int Gauss() {
        int ans = 1;
        for(int i = 1; i < n; i ++) {
            for(int j = i + 1; j < n; j ++)
                while(a[j][i]) {
                    int t = a[i][i] / a[j][i];
                    for(int k = i; k < n; k ++)
                        a[i][k] = (a[i][k] - t * a[j][k] + mod) % mod;
                    swap(a[i], a[j]);
                    ans = - ans;
                }
            ans = (ans * a[i][i]) % mod;
        }
        return (ans + mod) % mod;
    }
    } // namespace mat
    
    int a[N][N],d[N][N],b[N][N],c[N][N],n,m,ind;
    char str[N];
    
    int id(int i,int j) {
        return c[i][j];
    }
    
    int add(int p,int q) {
        a[p][q]=a[q][p]=1;
        d[p][p]++;
        d[q][q]++;
    }
    
    signed main() {
        ios::sync_with_stdio(false);
        cin>>n>>m;
        for(int i=1; i<=n; i++) {
            cin>>str+1;
            for(int j=1; j<=m; j++) {
                if(str[j]=='.') b[i][j]=0, c[i][j]=++ind;
                else b[i][j]=1;
            }
        }
        for(int i=1; i<=n; i++) {
            for(int j=1; j<=m; j++) {
                if(b[i][j]==0) {
                    if(i<n && b[i+1][j]==0) add(id(i,j),id(i+1,j));
                    if(j<m && b[i][j+1]==0) add(id(i,j),id(i,j+1));
                }
            }
        }
        mat::n=ind;
        for(int i=1; i<=ind; i++) {
            for(int j=1; j<=ind; j++) {
                mat::a[i][j]=d[i][j]-a[i][j];
            }
        }
        cout<<mat::Gauss()<<endl;
    }
    
  • 相关阅读:
    tensorflow学习笔记13
    Java——内部类
    Java——枚举
    Java——代码块
    Java——static
    Java——接口
    Java——final
    Java——权限修饰符
    Java——多态
    Java——抽象类
  • 原文地址:https://www.cnblogs.com/mollnn/p/12245126.html
Copyright © 2020-2023  润新知