1 条题解
-
3
DFS 硬暴力能过。
把矩阵看成二进制,有 位,直接用 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; }
信息
- ID
- 827
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 50
- 已通过
- 9
- 上传者