思路:设置两个数组分别用来存放打落果子的数量和未操作之前每颗苹果树的总数,进行遍历加减操作取最大值,当两数相同时取最小的编号利用min函数实现。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,m;
int arr[1001][1001];
int fnum[1001];//记录每颗树的疏果个数
int tnum[1001];//记录每棵树疏果前的个数
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m+1;j++){
cin>>arr[i][j];
}
}
//计算每一棵树的疏果个数
memset(fnum,0,sizeof(fnum));
for(int i=0;i<n;i++){
for(int j=1;j<m+1;j++){
fnum[i]+=abs(arr[i][j]);
}
tnum[i]=arr[i][0];
}
//输出最后一轮操作后的苹果总数
int sum=0,index=1<<30;
int maxnum=fnum[0];
for(int i=0;i<n;i++){
sum=sum+(tnum[i]-fnum[i]);
maxnum=max(maxnum,fnum[i]);
}
cout<<sum<<" ";
for(int i=0;i<n;i++){
if(fnum[i]==maxnum){
index=min(index,i);
}
}
cout<<index+1<<" "<<maxnum;
}