WA80 求调
查看原帖
WA80 求调
566168
川寰boy楼主2023/1/10 20:52

直角

// 1是黑,0是白
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <string>

using namespace std;

#define ll long long

int mp[105][105], tmp[105][105];

char in[105][105];

int main()
{
    int i, j, n, m;
    cin >> n;
    m = n;
    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= m; j++)
        {
            cin >> in[i][j];
            if (in[i][j] == 'b')
            {
                mp[i][j] = 1;
            }
            else
            {
                mp[i][j] = 0;
            }
        }
    }
    int min_ = 1e9;
    for (int state = 0; state < (1 << m); state++)
    {
        for (j = 1; j <= m; j++)
        {
            tmp[1][j] = state >> (j - 1) & 1;
        }
        int tot = 0;
        for (i = 1; i <= n; i++)
        {
            for (j = 1; j <= m; j++)
            {
                tmp[i + 1][j] = mp[i][j] ^ tmp[i][j] ^ tmp[i - 1][j] ^ tmp[i][j - 1] ^ tmp[i][j + 1];
                tot += tmp[i][j];
            }
        }
        int white = 0, black = 0;
        bool flag = 1;
        for (i = 1; i <= n; i++)
        {
            if (tmp[n + 1][i] == 0)
            {
                white++;
                if (black > 0)
                {
                    flag = 0;
                    break;
                }
            }
            else
            {
                black++;
                if (white > 0)
                {
                    flag = 0;
                    break;
                }
            }
        }
        if (flag && tot < min_)
        {
            min_ = tot;
        }
    }
    if (min_ == 1e9)
    {
        cout << "Impossible";
        return 0;
    }
    cout << min_;
    return 0;
}

马蜂丑勿喷

2023/1/10 20:52
加载中...