Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int m[4][4];
- int um[4][4];
- int t[3][3];
- int k[16];
- int n = -1;
- int apply(int r, int c) {
- for (int i = -1; i < 2; i++) {
- for (int j = -1; j < 2; j++) {
- if (t[i + 1][j + 1] == 1 && r + i >= 0 && r + i < 4 && c + j >= 0 && c + j < 4) {
- um[r + i][c + j] = 1 - um[r + i][c + j];
- }
- }
- }
- }
- void check() {
- for (int i = 0; i < 4; i++) {
- for (int j = 0; j < 4; j++) {
- um[i][j] = m[i][j];
- }
- }
- int c = 0;
- for (int i = 0; i < 16; i++) {
- if (k[i]) {
- apply(i/4, i%4);
- c++;
- }
- }
- for (int i = 0; i < 4; i++) {
- for (int j = 0; j < 4; j++) {
- if (um[i][j] != um[0][0]) {
- c = -1;
- }
- }
- }
- if (n == -1) {
- n = c;
- } else if (c > -1) {
- n = min(n, c);
- }
- }
- void f(int l) {
- if (l > 15) {
- check();
- } else {
- k[l] = 1;
- f(l + 1);
- k[l] = 0;
- f(l + 1);
- }
- }
- int main() {
- for (int i = 0; i < 4; i++) {
- for (int j = 0; j < 4; j++) {
- char c;
- cin >> c;
- if (c == 'B') {
- m[i][j] = 0;
- } else {
- m[i][j] = 1;
- }
- }
- }
- for (int i = 0; i < 3; i++) {
- for (int j = 0; j < 3; j++) {
- char v;
- cin >> v;
- t[i][j] = v - '0';
- }
- }
- f(0);
- if (n == -1) {
- cout << "Impossible";
- } else {
- cout << n;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement