//有四个碎的棋盘,要给小方格上色使得它与四周的小方格颜色不同
//共有6种情况
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=200+5;
char maze[maxn][maxn],field[maxn][maxn];
char str1[maxn][maxn];
char str2[maxn][maxn];
char str3[maxn][maxn];
char str4[maxn][maxn];
int main()
{
int n;
scanf("%d",&n);
//构建标准情况
maze[0][0]='1';
field[0][0]='0';
for(int i=1;i<n;i++)
maze[0][i]=(maze[0][i-1]=='1'?'0':'1');
for(int i=1;i<n;i++)
field[0][i]=(field[0][i-1]=='1'?'0':'1');
for(int i=1;i<n;i++)
for(int j=0;j<n;j++)
{
maze[i][j]=(maze[i-1][j]=='1'?'0':'1');
field[i][j]=(field[i-1][j]=='1'?'0':'1');
}
for(int i=0;i<n;i++)
scanf("%s",&str1[i]);
for(int i=0;i<n;i++)
scanf("%s",&str2[i]);
for(int i=0;i<n;i++)
scanf("%s",&str3[i]);
for(int i=0;i<n;i++)
scanf("%s",&str4[i]);
int sum=4*n*n;
//1 2
int k=0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str1[i][j]!=maze[i][j]) k++;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str2[i][j]!=maze[i][j]) k++;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str3[i][j]!=field[i][j]) k++;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str4[i][j]!=field[i][j]) k++;
sum=min(sum,k);
//1 3
k=0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str1[i][j]!=maze[i][j]) k++;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str3[i][j]!=maze[i][j]) k++;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str2[i][j]!=field[i][j]) k++;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str4[i][j]!=field[i][j]) k++;
sum=min(sum,k);
// 1 4
k=0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str1[i][j]!=maze[i][j]) k++;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str4[i][j]!=maze[i][j]) k++;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str2[i][j]!=field[i][j]) k++;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str3[i][j]!=field[i][j]) k++;
sum=min(sum,k);
//2 3
k=0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str2[i][j]!=maze[i][j]) k++;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str3[i][j]!=maze[i][j]) k++;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str1[i][j]!=field[i][j]) k++;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str4[i][j]!=field[i][j]) k++;
sum=min(sum,k);
//2 4
k=0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str2[i][j]!=maze[i][j]) k++;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str4[i][j]!=maze[i][j]) k++;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str1[i][j]!=field[i][j]) k++;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str3[i][j]!=field[i][j]) k++;
sum=min(sum,k);
// 3 4
k=0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str3[i][j]!=maze[i][j]) k++;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str4[i][j]!=maze[i][j]) k++;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str1[i][j]!=field[i][j]) k++;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(str2[i][j]!=field[i][j]) k++;
sum=min(sum,k);
cout<<sum<<endl;
return 0;
}
Educational Codeforces Round 41 (Rated for Div. 2) C. Chessboard 暴力
最新推荐文章于 2019-04-11 10:01:07 发布