#419 (Div. 2) C 思维题

来源:互联网 发布:淘宝店首页怎么装修 编辑:程序博客网 时间:2024/06/03 16:39

思维题,多出样例,多看题意

题意:

有nxm的方格,每个方格有数字

gi.j
。现在有两个操作。

  1. 对每一行的每一个数字都删除1,前提是每一个数字至少为1
  2. 对每一列的每一个数字都删除1,前提是每一个数字至少为1

经过很多上述的两种操作,如果方格里面的数字全都可以变为0,则输出最少的操作次数和操作方式

操作方式有很多种,输出一种就行。如果不能实现输出-1

思路:

这里有个误区,最开始在思考怎么操作的时候会觉得先横着或者先竖着都一样,其实对于n!= m的情况有时候是不行的,例如:

554433
如果按照先行操作的时候只需要 3 + 3 + 2 +1 = 9次,但是如果按照列操作的时候就是5+4+3 = 12次。所以很明显需要先比较n和m的大小,谁大先算谁。

#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn = 105;const int INF = 0x3f3f3f3f;int n,m,times;int a[maxn][maxn];int r[maxn],c[maxn];void row(){    for(int i = 1;i <= n; i++) {        int Min = INF;        for(int j = 1;j <= m; j++) {            Min = min(Min,a[i][j]);        }        if(Min > 0 && Min != INF) {            r[i] = Min;            times += Min;            for(int j = 1;j <= m; j++)                a[i][j] -= Min;        }    }}void col(){    for(int j = 1;j <= m; j++) {        int Min = INF;        for(int i = 1;i <= n; i++) {            Min = min(Min,a[i][j]);        }        if(Min > 0 && Min != INF) {            c[j] = Min;            times += Min;            for(int i = 1;i <= n; i++)                a[i][j] -= Min;        }    }}int main(int argc, char const *argv[]){    //freopen("in.txt","r",stdin);    times = 0;    scanf("%d%d",&n,&m);    for(int i = 1;i <= n; i++) {        for(int j = 1;j <= m; j++) {            scanf("%d",&a[i][j]);        }    }    if(n < m)        row(),col();    else         col(),row();    int flag = false;    for(int i = 1;i <= n; i++) {        if(flag) break;        for(int j = 1;j <= m; j++)            if(a[i][j])                flag = true;    }    if(flag)        printf("-1\n");    else {        printf("%d\n",times);        for(int i = 1;i <= n; i++) {            while(r[i]) {                printf("row %d\n",i);                r[i] --;            }        }        for(int i = 1;i <= m; i++) {            while(c[i]) {                printf("col %d\n",i);                c[i] --;            }        }    }    return 0;}
阅读全文
0 0
原创粉丝点击