페이지

1640번: 동전 뒤집기 - 최적화 필요

https://www.acmicpc.net/problem/1640


#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;
}

댓글 없음 :

댓글 쓰기