CCF CSP 20190901 小明种苹果

题目
CCF CSP 20190901 小明种苹果_第1张图片
代码
解法1:利用二维数组处理数据

# include 
# include 
using namespace std;
typedef long long int LL;   //防止数据溢出最保险的办法
int main(){
    LL N,M;
    while(cin>>N>>M){
        LL a[N][M+2],i,j,sum,maxi,maxn;   //一定要弄清楚多少行,多少列
        for(i=0;i<N;i++){
            a[i][0]=0;
            for(j=1;j<=M+1;j++){
                cin>>a[i][j];
                if(j!=1){
                    a[i][0]+=a[i][j];
                }
            }
        }  //数据录入和累加部分完成
        maxi=N-1;   //实现提前赋值
        sum=a[N-1][1]+a[N-1][0];
        maxn=fabs(a[N-1][0]);
        for(i=N-2;i>=0;i--){
            sum+=a[i][1]+a[i][0];
            if((maxn<fabs(a[i][0]))||(maxn==fabs(a[i][0]))){
                maxi=i;
                maxn=fabs(a[i][0]);
            }
        }
        cout<<sum<<" "<<maxi+1<<" "<<maxn<<endl;
    }
    return 0;
}

解法二:不用数组,减少空间消耗

# include 
# include 
using namespace std;
typedef long long int LL;
int main(){
    LL fnum,ans,num,tr,lnum,order,N,M,i,j,maxnum,maxi;
    while(cin >>N>>M){
        ans=0; //存放最终的结果
        for(i=1;i<=N;i++){
            cin >>fnum;  //读取i号树上的初始苹果数
            num = 0;    //计算疏果数
            for(j=1;j<=M;j++){
                cin >>tr;
                num += tr;
            }
            fnum += num;    //i号数剩余果实数量
            ans += fnum;    //总共的剩余果实数量
            if(i==1){   //比较找到最大疏果值
                maxnum = fabs(num);
                maxi = 1;
            }
            if(i>1 && (fabs(maxnum)<fabs(num))){
                maxnum = fabs(num);
                maxi = i;
            }
        }
        cout <<ans<<" "<<maxi<<" "<<maxnum<<endl;
    }
}

评价
第二种方法比较适合采用,从空间复杂度的角度来看是更优的。

你可能感兴趣的:(算法)