链接:https://ac.nowcoder.com/acm/contest/3667/B
来源:牛客网
Y 老师因为贫穷破费(应该是去买乐高玩具了),现在只能将他镀金的门窗变卖换钱了,但这样就不能抵御即将到来的寒潮了,所以 Y 老师用了几块木板将它的门窗钉了起来,其中包括 n 块横向木板和 m 块纵向木板,横向木板总是与纵向木板十字交叉,这样 Y 老师就能做好一副n*m的井字窗。如下图是一个4*10的井字窗:
现在已知 Y 老师只会钉两块木板的交叉处,我们知道了每颗钉子对这块木板的磨损程度,你能帮他算一下,磨损程度最大的木板,它的磨损度是多少
输入描述:
第一行两个数字,n,m分别代表横向木板与纵向木板的总数量(1<=n,m<=1e5 , n * m <= 1e6)
接下来有 n 行 m 列的矩阵,第 i 行 第 j 列的数字代表,第 i 块横向木板与第 j 块纵向木板之间钉子会造成的磨损程度,矩阵中的每个数是不超过1e5的整数
输出描述:
一行一个数字输出,最大磨损的程度。
示例1
说明
样例中,第一且唯一的一块横向木板被钉了两次,所以它的磨损程度最大
#pragma GCC optimize(2) #include<bits/stdc++.h> using namespace std; inline int read() {int x=0,f=1;char c=getchar();while(c!='-'&&(c<'0'||c>'9'))c=getchar();if(c=='-')f=-1,c=getchar();while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return f*x;} typedef long long ll; const int maxn = 1e6+10; ll c[maxn]; ll d[maxn]; int main() { int n,m,x; cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ scanf("%d",&x); c[i]+=x; d[j]+=x; } } sort(c+1,c+n+1); sort(d+1,d+m+1); ll t=max(c[n],d[m]); printf("%lld",t); return 0; }