Untitled
unknown
plain_text
2 years ago
1.9 kB
4
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...