zoukankan      html  css  js  c++  java
  • 【LOJ#2238】【CQOI2014】—和谐矩阵(高斯消元)

    传送门

    直接暴力O(n3m3ω)O(frac{n^3m^3}{omega})高消即可

    考虑把第一行的状态设为未知量
    a[i][j] xor a[i1][j] xor a[i+1][j] xor a[i][j1] xor a[i][j+1]a[i][j]{ xor }a[i-1][j]{ xor }a[i+1][j] xor a[i][j-1] xor a[i][j+1]
    就可以一行行递推了
    最后把第nn的状态拿出来做一个高斯消元了
    复杂度O(n3)O(n^3)

    #include<bits/stdc++.h>
    using namespace std;
    const int RLEN=1<<20|1;
    inline char gc(){
        static char ibuf[RLEN],*ib,*ob;
        (ob==ib)&&(ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));
        return (ob==ib)?EOF:*ib++;
    }
    #define gc getchar
    inline int read(){
        char ch=gc();
        int res=0,f=1;
        while(!isdigit(ch))f^=ch=='-',ch=gc();
        while(isdigit(ch))res=(res+(res<<2)<<1)+(ch^48),ch=gc();
        return f?res:-res;
    }
    #define ll long long
    #define re register
    #define pii pair<int,int>
    #define fi first
    #define se second
    #define pb push_back
    #define cs const
    #define bg begin
    #define poly vector<int>
    cs int N=44;
    int g[N][N],n;
    int f[N][N][N],a[N][N],m;
    inline void gauss(){
    	for(int i=1;i<=n;i++){
    		int pos;
    		for(pos=i;pos<=n;pos++)if(a[pos][i])break;
    		if(pos>n)continue;
    		if(pos!=i)swap(a[pos],a[i]);
    		for(int j=i+1;j<=n;j++)
    		if(a[j][i])for(int k=i;k<=n;k++)a[j][k]^=a[i][k];
    	}
    	for(int i=n;i;i--){
    		if(!a[i][i])g[1][i]=1;
    		else for(int k=i+1;k<=n;k++)if(a[i][k])g[1][i]^=g[1][k];
    	}
    }
    int main(){
    	m=read(),n=read();
    	for(int i=1;i<=n;i++)f[1][i][i]=1;
    	for(int i=2;i<=m+1;i++)
    	for(int j=1;j<=n;j++)for(int k=1;k<=n;k++)f[i][j][k]=f[i-1][j][k]^f[i-1][j-1][k]^f[i-1][j+1][k]^f[i-2][j][k];
    	memcpy(a,f[m+1],sizeof(f[m+1]));
    	gauss();
    	for(int i=2;i<=m;i++)
    	for(int j=1;j<=n;j++)g[i][j]=g[i-1][j]^g[i-1][j-1]^g[i-1][j+1]^g[i-2][j];
    	for(int i=1;i<=m;i++,puts(""))
    	for(int j=1;j<=n;j++)cout<<g[i][j]<<" ";
    }
    
  • 相关阅读:
    Beyond Compare 4 使用30天后过期续用方法
    cookie和Session是啥?
    如何添加博客园访问次数统计
    获取DataFrame列名的3种方法
    GET与POST方法和用curl命令执行
    Series拼接回DataFrame
    pandas.to_json&to_dict&from_json&from_dict解读
    Mysql判断是否某个字符串在某字符串字段的4种方法
    alias 命令
    python中的pyc和pyo文件和__pyc__文件夹
  • 原文地址:https://www.cnblogs.com/stargazer-cyk/p/12328569.html
Copyright © 2011-2022 走看看