牛客國慶集訓派對Day6 B-Board (思維)
阿新 • • 發佈:2018-12-13
題目描述
恬恬有一個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; }