牛客国庆集训派对Day6 B-Board (思维)

版权声明:Why is everything so heavy? https://blog.csdn.net/lzc504603913/article/details/82953085

链接:https://www.nowcoder.com/acm/contest/206/B
来源:牛客网
 

题目描述

恬恬有一个nx n的数组。她在用这个数组玩游戏:
开始时,数组中每一个元素都是0。
恬恬会做某些操作。在一次操作中,她可以将某一行的所有元素同时加上一个值,也可以将某一列的所有元素同时加上一个值。
在几次操作后,一个元素被隐藏了。你能帮助她回忆隐藏的数是几吗?

输入描述:

第一行一个整数n(1≤ n≤ 1000)。
接下来n行每行n个整数表示数组a。
第(i+1)行的第j个元素表示aij(aij=-1或0≤ aij ≤ 10000)。-1表示隐藏的元素。

输出描述:

仅一个整数表示答案。

示例1

输入

复制

3
1 2 1
0 -1 0
0 1 0

输出

复制

1

解题思路:枚举每一行,如果该行所有数都大于0,那么就消掉这一行的最小值。然后枚举列做同样的操作。把-1初始化为一个很大的数即可。最后重新推算出答案就好了。

#include <bits/stdc++.h>
#define IOS ios_base::sync_with_stdio(0); cin.tie(0)
#define ll long long
using namespace std;
const int MAXN=1002;

int a[MAXN][MAXN];

int main(){

    int N;
    scanf("%d",&N);

    for(int i=1;i<=N;i++){
        for(int j=1;j<=N;j++){
            scanf("%d",&a[i][j]);
            if(a[i][j]==-1)
                a[i][j]=50000;
        }
    }

    for(int i=1;i<=N;i++){
        int minn=500000;
        for(int j=1;j<=N;j++){
            if(a[i][j]<minn)
                minn=a[i][j];
        }
        if(minn!=0){
            for(int j=1;j<=N;j++)
                a[i][j]-=minn;
        }
    }

    for(int i=1;i<=N;i++){
        int minn=500000;
        for(int j=1;j<=N;j++){
            if(a[j][i]<minn)
                minn=a[j][i];
        }
        if(minn!=0){
            for(int j=1;j<=N;j++)
                a[j][i]-=minn;
        }
    }

    for(int i=1;i<=N;i++)
        for(int j=1;j<=N;j++)
            if(a[i][j]!=0)
                cout<<50000-a[i][j]<<endl;


    return 0;
}

猜你喜欢

转载自blog.csdn.net/lzc504603913/article/details/82953085
今日推荐