1 条题解

  • 3
    @ 2026-9-5 11:55:46

    DFS 硬暴力能过。

    把矩阵看成二进制,有 2525 位,直接用 int 存,然后预处理每一个反转后需要异或的值,然后 DFS 硬暴力6层,存一下答案就可以了。

    查询的时候转成二进制直接查。

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    char a[10][10];
    int xo[]={35,71,142,284,536,1121,2274,4548,9096,17168,35872,72768,145536,291072,549376,1147904,2328576,3178496,4657152,7405568,9314304,14811136,17580032,25690112,29622272};
    int ans=7;
    int anss[33554435];
    inline int zh(){
    	int now=0;
    	for(int i=1; i<=5; i++){
    		for(int j=1; j<=5; j++){
    			now=now*2+a[i][j]-'0';
    		}
    	}
    	return now;
    }
    inline void dfs(int step,int now){
    	anss[now]=max(anss[now],step);
    	if(step==0){
    		return;
    	}
    	for(int i=0; i<25; i++) dfs(step-1,now^xo[i]);
    }
    signed main(){
    	cin.tie(0);
    	ios::sync_with_stdio(false);
    	memset(anss,-1,sizeof anss);
    	dfs(6,33554431);
    	int T;
    	cin>>T;
    	while(T--){
    		for(int i=1; i<=5; i++){
    			for(int j=1; j<=5; j++){
    				cin>>a[i][j];
    			}
    		}
    		int k=zh();
    		if(anss[k]==-1) cout<<-1<<"\n";
    		else cout<<6-anss[k]<<"\n";
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    827
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    (无)
    递交数
    50
    已通过
    9
    上传者