1 条题解

  • 0
    @ 2025-10-8 17:14:11
    #include<bits/stdc++.h>
    using namespace std;
    typedef bitset<105> bt;
    const int N=110;
    int n, m, top, ans[N][N]; bool f[N][N*N];
    bt mp[N], a[N], b[N], st[N], h[N][N*N];
    inline int read() {
        int x=0,f=1;
        char ch=getchar();
        while(ch<'0' || ch>'9'){if(ch=='-') f=-1; ch=getchar();}
        while(ch>='0' && ch<='9'){x=x*10+ch-'0'; ch=getchar();}
        return x*f;
    }
    void insert(bt x) {
    	for(int i=1;i<=n;i++) if(x[i]) {
    		if(b[i].none()) {b[i]=x; return ;}
    		x^=b[i];
    	}
    }
    void build() {
    	top=0; 
    	for(int i=n;i>=1;i--) if(!b[i].none()) 
    		for(int j=1;j<=i-1;j++) if(b[j][i]) 
    			b[j]^=b[i];
    	for(int i=1;i<=n;i++) if(b[i].none()) {
    		bt tp; tp[i]=1;
    		for(int j=1;j<=n;j++) if(b[j][i]) tp[j]=1;
    		st[++top]=tp;
    	}
    }
    void DP(int x) {
    	int v[N]; memset(v, 0, sizeof(v));
    	for(int i=0;i<=(1<<top)-1;i++) {
    		bt tp; for(int j=1;j<=top;j++) if(i&(1<<j-1)) tp^=st[i];
    		int c=tp.count();
    		if(v[c]) continue;
    		v[c]=1;
    		for(int j=c;j<=m;j++) if(!f[x][j]&&f[x-1][j-c])
    			f[x][j]=1, h[x][j]=tp;
    	}
    }
    void solve(int x) {
    	for(int i=1;i<=n;i++) a[i]=mp[i];
    	for(int i=1;i<=n;i++) a[i][i]=mp[i][i]^mp[i][x];
    	for(int i=1;i<=n;i++) b[i].reset();
    	for(int i=1;i<=n;i++) insert(a[i]);
    	build(); DP(x);
    }
    int main() {
    	scanf("%d%d", &n, &m); f[0][0]=1;
    	for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) mp[i][j]=read();
    	for(int i=1;i<=n;i++) solve(i);
    	if(!f[n][m]) {puts("-1"); return 0;}
    	puts("1"); int x=m; 
    	for(int i=n;i>=1;i--) {
    		bt c=h[i][x]; int k=c.count();
    		for(int j=1;j<=n;j++) if(c[j]) ans[i][j]=1; 
    		x-=k;
    	}
    	for(int i=1;i<=n;i++) {
    		for(int j=1;j<=n;j++) 
    			printf("%d ", ans[j][i]);
    		puts("");
    	}
    	return 0;
    }
    • 1

    「POI2019 R3」鸟类学家 Ornithologist

    信息

    ID
    7672
    时间
    10000ms
    内存
    8MiB
    难度
    10
    标签
    递交数
    9
    已通过
    2
    上传者