cf c题 个人赛 思维

给你一个矩阵,一开始都是零,让你通过只能刷一行或者一列的方式,把开始的矩阵刷乘给你的矩阵:

考虑最优解:

例如:

3 4                 4 3

1 1 1 1          1 1 1

1 1 1 1          1 1 1

1 1 1 1          1 1 1

                     1 1 1

#include <iostream>
#include<string.h>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
int main()
{
    int m,n,ge,a[110][110],t=0,t1=0,row[110000],b[110][110],col[110000],i,j,minn;
    scanf("%d%d",&n,&m);
    for(i=0; i<=n-1; i++)
        for(j=0; j<=m-1; j++)
        {
            scanf("%d",&a[i][j]);
        }
    if(n<=m)
    {
        for(i=0; i<=n-1; i++)
        {
            ge=0;
            minn=0x3f3f3f3f;
            for(j=0; j<=m-1; j++)
            {
                if(a[i][j]>=1)
                    ge++;
                minn=min(minn,a[i][j]);
            }
            if(ge==m)
            {
                for(int k=1; k<=minn; k++)
                    row[t++]=i+1;
                for(j=0; j<=m-1; j++)
                    b[i][j]+=minn;
            }

        }
        /* for(i=0;i<=n-1;i++)
             for(j=0;j<=m-1;j++)
         {
             if(j==m-1)
                 printf("%d
",b[i][j]);
             else
                 printf("%d ",b[i][j]);
         }*/
        for(j=0; j<=m-1; j++)
        {
            ge=0;
            minn=0x3f3f3f3f;
            int p=a[0][j]-b[0][j];
            for(i=0; i<=n-1; i++)
            {
                if(a[i][j]-b[i][j]==p)
                    ge++;
            }
            if(ge!=n&&ge!=0)
            {
                printf("-1
");
                return 0;
            }
            else
            {
                for(int k=1; k<=p; k++)
                    col[t1++]=j+1;
                for(i=0; i<=n-1; i++)
                    b[i][j]+=p;
            }
        }
        int flag=0;
        for(i=0; i<=n-1; i++)
        {
            for(j=0; j<=m-1; j++)
            {
                if(a[i][j]!=b[i][j])
                {
                    flag=1;
                }
            }
        }
        if(flag==1)
            printf("-1
");
        else
        {
            printf("%d
",t1+t);
            for(i=0; i<=t-1; i++)
                printf("row %d
",row[i]);
            for(i=0; i<=t1-1; i++)
                printf("col %d
",col[i]);
        }
    }
    else
    {
        for(j=0; j<=m-1; j++)
        {
            ge=0;
            minn=0x3f3f3f3f;
            for(i=0; i<=n-1; i++)
            {
                if(a[i][j]>=1)
                    ge++;
                minn=min(minn,a[i][j]);
            }
            if(ge==n)
            {
                for(int k=1; k<=minn; k++)
                    col[t1++]=j+1;
                for(i=0; i<=n-1; i++)
                    b[i][j]+=minn;
            }

        }
        /* for(i=0;i<=n-1;i++)
             for(j=0;j<=m-1;j++)
         {
             if(j==m-1)
                 printf("%d
",b[i][j]);
             else
                 printf("%d ",b[i][j]);
         }*/
        for(i=0; i<=n-1; i++)
        {
            ge=0;
            minn=0x3f3f3f3f;
            int p=a[i][0]-b[i][0];
            for(j=0; j<=m-1; j++)
            {
                if(a[i][j]-b[i][j]==p)
                    ge++;
            }
            if(ge!=m&&ge!=0)
            {
                printf("-1
");
                return 0;
            }
            else
            {
                for(int k=1; k<=p; k++)
                    row[t++]=i+1;
                for(j=0; j<=m-1; j++)
                    b[i][j]+=p;
            }
        }
        int flag=0;
        for(i=0; i<=n-1; i++)
        {
            for(j=0; j<=m-1; j++)
            {
                if(a[i][j]!=b[i][j])
                {
                    flag=1;
                }
            }
        }
        if(flag==1)
            printf("-1
");
        else
        {
            printf("%d
",t1+t);
            for(i=0; i<=t1-1; i++)
                printf("col %d
",col[i]);
            for(i=0; i<=t-1; i++)
                printf("row %d
",row[i]);

        }


    }



}
原文地址:https://www.cnblogs.com/bhd123/p/9742616.html