Untitled
unknown
plain_text
3 years ago
1.9 kB
7
Indexable
#include<iostream>
using namespace std;
int map[4][4];
int mapCopy[4][4];
int arrSinh[65536][16];
int dx[4] = {1,-1, 0, 0};
int dy[4] = {0, 0,-1, 1};
void turnOver(int x, int y){
mapCopy[x][y] = 1 - mapCopy[x][y];
for (int i = 0; i < 4; i++){
int x1 = x + dx[i];
int y1 = y + dy[i];
if (x1>=0 && x1<4 && y1>=0 && y1 <4){
mapCopy[x1][y1] = 1 - mapCopy[x1][y1];
}
}
}
bool checkFull(){
for (int i = 0; i < 4; i++){
for(int j=0; j < 4; j++){
if (mapCopy[i][j] != mapCopy[0][0]) return false;
}
}
return true;
}
int hang = 0;
void sinh(int k){
if (k == 16){
hang++;
return;
}
arrSinh[hang][k] = 0; sinh(k+1);
arrSinh[hang][k] = 1; sinh(k+1);
}
void resetMap(){
for (int i = 0; i < 4; i++){
for (int j = 0; j < 4; j++){
mapCopy[i][j] = map[i][j];
}
}
}
int main(){
// freopen("input.txt","r",stdin);
int TC; cin >> TC;
int ans;
for (int tc = 1; tc <= TC; tc++){
// input
for (int i = 0; i < 4; i++){
for (int j = 0; j < 4; j++){
char x; cin >> x;
if (x == 'b') map[i][j] = 1;
else if (x == 'w') map[i][j] = 0;
}
}
// reset SINH
ans = 1000000;
for (int i = 0; i < 65536; i++){
for (int j = 0; j < 16; j++){
arrSinh[i][j] = 0;
}
}
sinh(0);
// program
for (int i = 0; i < 65536; i++){
resetMap();
int sum = 0;
// lat theo tung truong hop i
for (int j = 0; j < 16; j++){
if(arrSinh[i][j] == 1){
// lat
sum++;
if (j<=3) turnOver(0,j);
else if (j<=7) turnOver(1,j-4);
else if (j<=11) turnOver(2,j-8);
else turnOver(3,j-12);
}
}
if (checkFull() && ans > sum && sum > 0) ans = sum;
}
cout << "Case #" << tc << endl;
if (ans < 1000000) cout << ans << endl;
else cout << "impossible" << endl;
}
return 0;
}Editor is loading...