Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
123945 | 黄戈 | 翻转棋盘 | C++ | 通过 | 100 | 1 MS | 252 KB | 1195 | 2024-01-23 10:26:39 |
#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; }