提交时间:2024-01-23 10:26:39

运行 ID: 123945

#include <bits/stdc++.h> using namespace std; long long a[5][5]; long long Min = 9e18; long long dx[] = {0,1,0,-1}; long long dy[] = {1,0,-1,0}; void f(long long x,long long Ans){ if (x == 4*4+1){ long long g = 0; for (long long i = 1; i <= 4; i++){ for (long long j = 1; j <= 4; j++){ g += a[i][j]; } } if (g == 0 || g == 4*4){ Min = min(Min,Ans); } return ; } f(x + 1,Ans); long long i = (x - 1) / 4 + 1; long long j = (x % 4)?(x % 4):4; a[i][j] ^= 1; for (long long k = 0; k < 4; k++){ long long tx = i + dx[k]; long long ty = j + dy[k]; if (tx > 0 && tx < 5 && ty > 0 && ty < 5){ a[tx][ty] ^= 1; } } f(x + 1,Ans + 1); a[i][j] ^= 1; for (long long k = 0; k < 4; k++){ long long tx = i + dx[k]; long long ty = j + dy[k]; if (tx > 0 && tx < 5 && ty > 0 && ty < 5){ a[tx][ty] ^= 1; } } } int main(){ for (long long i = 1; i <= 4; i++){ for (long long j = 1; j <= 4; j++){ char aa; cin >> aa; if (aa == 'w'){ a[i][j] = 0; } else { a[i][j] = 1; } } } f(1,0); if (Min == 9e18) { cout<<"Impossible"; } else{ cout<<Min; } return 0; }