CodeForces-816C Karen and Game 水题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37753409/article/details/83473229

CodeForces-816C Karen and Game

题意: 给定一个矩阵, 可以把一个全是0的矩阵通过给一行或一列加1到达这个矩形, 问方式(spical judge), 若不能输出-1.
分析: 纯暴力模拟一下, 矩阵的大小不超过100.
代码:

#include <iostream>
#include <cstdio>

using namespace std;

const int MAXN = 105;
int a[MAXN * MAXN * MAXN], f[MAXN * MAXN * MAXN], g[MAXN][MAXN];
int main()
{
    int n, m;
    scanf("%d%d", &n, &m);
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            scanf("%d", &g[i][j]);
    int cnt = 0;
    int flag2 = 0;
    if (n < m)
    {
        while (flag2 < n)
        {
            flag2 = 0;
            for (int i = 0; i < n; i++)
            {
                bool flag = true;
                for (int j = 0; j < m; j++)
                    if (!g[i][j])
                    {
                        flag = false;
                        break;
                    }
                if (flag)
                {
                    for (int j = 0; j < m; j++)
                    {
                        g[i][j]--;
                    }
                    f[++cnt] = 0;
                    a[cnt] = i;
                }
                if (!flag)
                    flag2++;
            }
            // cout << flag2 << endl;
        }
        flag2 = 0;
        while (flag2 < m)
        {
            flag2 = 0;
            for (int i = 0; i < m; i++)
            {
                bool flag = true;
                for (int j = 0; j < n; j++)
                    if (!g[j][i])
                    {
                        flag = false;
                        break;
                    }
                if (flag)
                {
                    for (int j = 0; j < n; j++)
                    {
                        g[j][i]--;
                    }
                    f[++cnt] = 1;
                    a[cnt] = i;
                }
                if (!flag)
                    flag2++;
            }
        }
    }
    else
    {
        flag2 = 0;
        while (flag2 < m)
        {
            flag2 = 0;
            for (int i = 0; i < m; i++)
            {
                bool flag = true;
                for (int j = 0; j < n; j++)
                    if (!g[j][i])
                    {
                        flag = false;
                        break;
                    }
                if (flag)
                {
                    for (int j = 0; j < n; j++)
                    {
                        g[j][i]--;
                    }
                    f[++cnt] = 1;
                    a[cnt] = i;
                }
                if (!flag)
                    flag2++;
            }
        }
        flag2 = 0;
        while (flag2 < n)
        {
            flag2 = 0;
            for (int i = 0; i < n; i++)
            {
                bool flag = true;
                for (int j = 0; j < m; j++)
                    if (!g[i][j])
                    {
                        flag = false;
                        break;
                    }
                if (flag)
                {
                    for (int j = 0; j < m; j++)
                    {
                        g[i][j]--;
                    }
                    f[++cnt] = 0;
                    a[cnt] = i;
                }
                if (!flag)
                    flag2++;
            }
            // cout << flag2 << endl;
        }
    }

    bool flag = true;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            if (g[i][j])
            {
                flag = false;
                break;
            }
        }
    }

    if (!flag)
    {
        cout << -1 << endl;
    }
    else
    {
        cout << cnt << endl;
        for (int i = 1; i <= cnt; i++)
        {

            if (!f[i])
                cout << "row ";
            else
                cout << "col ";
            cout << a[i] + 1 << endl;
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37753409/article/details/83473229