#include #include #include using namespace std; struct State { int a[66][66]; }; int N, K, L[509]; State S; void flip(int px, int py, int qx, int qy) { for (int i = px; i <= qx; i++) { for (int j = py; j <= qy; j++) S.a[i][j] ^= 1; } } vector solve(vectorM, vectorquery) { int maxn = -1; vectorV; for (int i = 0; i < 10000; i++) { vectorU = M; vectorC; for (int j = 0; j < query.size(); j++) { int p1 = rand() % (N - query[j] + 1); C.push_back(p1 + 1); for (int k = p1; k < p1 + query[j]; k++) U[k] ^= 1; } int T = 0; for (int j = 0; j < U.size(); j++) { if (U[j] == 1) T++; } if (maxn < T) { maxn = T; V = C; } } return V; } int main() { srand((unsigned)time(NULL)); cin >> N >> K; for (int i = 1; i <= K; i++) cin >> L[i]; for (int i = 1; i <= N; i++) { for (int j = 1; j <= N; j++) { char c; cin >> c; if (c == '0') S.a[i][j] = 1; else S.a[i][j] = 0; } } int s = 1; for (int i = 1; i <= N; i++) { int t = (K - i + N) / N; vectorI, J; for (int j = s; j < s + t; j++) I.push_back(L[j]); for (int j = 1; j <= N; j++) J.push_back(S.a[i][j]); vectorY = solve(J, I); for (int j = 0; j < Y.size(); j++) { cout << i << " " << Y[j] << " " << i << " " << Y[j] + I[j] - 1 << endl; flip(i, Y[j], i, Y[j] + I[j] - 1); } s += t; } int score = 0; for (int i = 1; i <= N; i++) { for (int j = 1; j <= N; j++) { if (S.a[i][j] == 1) score++; } } //cout << "#score = " << score << endl; return 0; }