版权声明: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;
}