技巧:
二进制串模型枚举尝试
思路:
二进制串模型枚举尝试
实现:
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
int[][] arr = new int[4][4];
for (int i = 0; i < 4; i++) {
char[] chars = br.readLine().toCharArray();
for (int j = 0; j < chars.length; j++) {
if ('b' == chars[j]) {
arr[i][j] = 1;
}
}
}
// ====================================================
int ans = 0x7fffffff;
int tryModel = 1 << 16;
for (int i = 0; i < tryModel; i++) {
if (allSame(flip(arr, i))) {
int count = 0;
int x = i;
while (x != 0) {
if ((x & 1) == 1) {
count++;
}
x >>= 1;
}
ans = count < ans ? count : ans;
}
}
if (ans == 0x7fffffff) {
System.out.println("Impossible");
} else {
System.out.println(ans);
}
}
static boolean allSame(int[][] tmp) {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (tmp[i][j] != tmp[0][0]) {
return false;
}
}
}
return true;
}
static int[][] flip(int[][] arr, int k) {
int[][] tmp = new int[4][4];
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
tmp[i][j] = arr[i][j];
}
}
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if ((k & 1) == 1) {
tmp[i][j] ^= 1;
if (i > 0) {
tmp[i - 1][j] ^= 1;
}
if (i < 3) {
tmp[i + 1][j] ^= 1;
}
if (j > 0) {
tmp[i][j - 1] ^= 1;
}
if (j < 3) {
tmp[i][j + 1] ^= 1;
}
}
k >>= 1;
}
}
return tmp;
}
}

京公网安备 11010502036488号