#include <iostream>
#include<bits/stdc++.h>
using namespace std;
struct info//定义一个结构体,存放序号,去除的苹果数,这棵苹果树还剩下的苹果个数
{
int index;
int substract;
int left;
};
bool compare(info x1,info x2)//从做过的一道ccf,检测点优先排序的问题,得到灵感,针对题目对个别属性要求进行排序,sort compare太香了。
{ //先对去除的苹果数较大的进行优先排序,然后对序号较大的进行优先排序
if(x1.substract!=x2.substract)
{
return x1.substract>x2.substract;
}
else if(x1.index!=x2.index)
{
return x1.index<x2.index;
}
}
int main()
{
int n,m;
cin>>n>>m;
info in[n];
int sum=0;
int before=0,cut=0,substact;
int left;
for(int i=0;i<n;i++)
{
cin>>before;
substact=0;
for(int j=0;j<m;j++)//根据修建次数,确定循环相加几次去除的苹果数
{
cin>>cut;
substact+=cut;
}
int tempsub;
tempsub=abs(substact);
in[i].index=i+1;
in[i].left=before+substact;//把原有的苹果数有去除的苹果数相加起来
in[i].substract=tempsub;
}
sort(in,in+n,compare);
for(int i=0;i<n;i++)//算出修剪后剩下的苹果
{
sum+=in[i].left;
}
cout<<sum<<" "<<in[0].index<<" "<<in[0].substract<<endl;
return 0;
}
总结:1.该题思想由上次做的检测点迁移过来,解题思路一 下子就打开了
2.abs()使用了之后会改变被操作数的值,一下附上,几个取绝对值的用法