#include<stdio.h> #include<algorithm> using namespace std; int n, m, xcnt[1000], ycnt[1000], x, y, res = 2e9; bool f(int r, int c, int s1, int s2) { return !(s1 % 2 ? n - r : r) && !(s2 % 2 ? m - c : c); } int main() { scanf("%d %d", &n, &m); for (int i = 0; i < n; i++) { for (int j = 0, a; j < m; j++) { scanf("%1d", &a); xcnt[i] += a; ycnt[j] += a; } } for (int i = 0; i < n; i++) x += xcnt[i] % 2; for (int i = 0; i < m; i++) y += ycnt[i] % 2; if (f(m % 2 ? 0 : x, n % 2 ? 0 : y, y, x)) res = x + y; if (f(m % 2 ? 0 : x, n % 2 ? m : m - y, m - y, x)) res = min(res, x + m - y); if (f(m % 2 ? n : n - x, n % 2 ? 0 : y, y, n - x)) res = min(res, n - x + y); if (f(m % 2 ? n : n - x, n % 2 ? m : m - y, m - y, n - x)) res = min(res, n - x + m - y); printf("%d", res == 2e9 ? -1 : res); return 0; }
1640번: 동전 뒤집기 - 최적화 필요
https://www.acmicpc.net/problem/1640
피드 구독하기:
댓글
(
Atom
)
댓글 없음 :
댓글 쓰기