Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <iostream>#include <cstdio>#include <vector>#include <unordered_map>using namespace std;vector<vector<int>> b;vector<vector<int>> tem[8];bool dfs(int depth,int n,int x,int y){unordered_map<int,int> count;for(int i=0;i<n;++i)for(int j=0;j<n;++j)++count[b[x+i][y+j]];for(int i=0;i<n;++i)for(int j=0;j<n;++j)if(--count[tem[depth][x+i][y+j]]<0)return false;bool re=true;for(int i=0;i<n;++i)for(int j=0;j<n;++j)if((tem[depth+1][x+i][y+j]=tem[depth][x+i][y+j])!=b[x+i][y+j])re=false;if(re)return true;if(n%2==0&&dfs(depth+1,n/2,x,y)&&dfs(depth+1,n/2,x+n/2,y)&&dfs(depth+1,n/2,x+n/2,y+n/2)&&dfs(depth+1,n/2,x,y+n/2))return true;re=true;for(int i=0;i<n;++i)for(int j=0;j<n;++j)if((tem[depth+1][x+i][y+j]=tem[depth][x+j][y+n-1-i])!=b[x+i][y+j])re=false;if(re)return true;if(n%2==0&&dfs(depth+1,n/2,x,y)&&dfs(depth+1,n/2,x+n/2,y)