题目描述 小明在他的果园里种了一些苹果树。为了保证苹果的品质,在种植过程中要进行若干轮疏果操作,也就是提前从树上把不好的苹果去掉。第一轮疏果操作开始前,小明记录了每棵树上苹果的个数。每轮疏果操作时,小明都记录了从每棵树上去掉的苹果个数。在最后一轮疏果操作结束后,请帮助小明统计相关的信息。 输入格式 从标准输入读入数据。 第1行包含两个正整数N和M,分别表示苹果树的棵数和疏果操作的轮数。 第1+i行(1<= i <= N),每行包含M+1个整数ai0,ai1,…,aiM。其中ai0为正整数,表示第一轮疏果操作开始前第i棵树上苹果的个数。aij(1 <= j <= M)为零或负整数,表示第j轮疏果操作时从第i棵树上去掉的苹果个数。如果为0,表示没有去掉苹果;如果为负,其绝对值为去掉的苹果个数。 每行中相邻两个数之间用一个空格分隔。 输出格式 输出到标准输出。 输出只有一行,包含三个整数T、k和P。其中, T为最后一轮疏果操作后所有苹果树上剩下的苹果总数(假设苹果不会因为其它原因减少); k为疏果个数(也就是疏果操作去掉的苹果个数)最多的苹果树编号; P为该苹果树的疏果个数。 相邻两个数之间用一个空格分隔。输入的数据保证是正确的,也就是说,每棵树在全部疏果操作结束后剩下的苹果个数是非负的。 样例1 输入:
3 3 73 -8 -6 -4 76 -5 -10 -8 80 -6 -15 0输出:
167 2 23样例解释: 第1棵苹果树的疏果个数为8+6+4 = 18, 第2棵为5+10+8 = 23,第3棵为6+15+0 = 21,因此最后一轮疏果操作后全部苹果树上的苹果个数总和为(73 -18)+ (76 - 23)+ (80 - 21)= 167,疏果个数最多的是第2棵树,其疏果个数为23。 样例2 输入:
2 2 10 -3 -1 15 -4 0输出:
17 1 4样例解释: 两棵树的疏果个数均为4,应输出编号最小的第1棵数。
子任务 1 |aij|<= 106,对所有1 <= i <= N, 0<= j <= M。
#include<iostream> using namespace std; const int N=1001; int a[N][N],tree_drop[N]; int main() { int n,m,sum=0,tree=0; int i,j,max; cin>>n>>m; for(i=0;i<n;i++) { for(j=0;j<m+1;j++) { cin>>a[i][j]; } } for(i=0;i<n;i++) { for(j=0;j<m+1;j++) { sum = sum+a[i][j]; } } for(i=0;i<n;i++) { for(j=1;j<m+1;j++) { tree = tree+a[i][j]; } tree_drop[i] = -tree; tree = 0; } max = tree_drop[0]; int id = 1; //当tree_drop[i]一样时,选出编号小的 for(i=1;i<n;i++) { if(tree_drop[i]>max) { max = tree_drop[i]; id= i+1; } } cout<<sum<<" "<<id<<" "<<max; }碰到的坑:设置二维数组时可以设置成全局变量,以免数据过大,造成小黑框无故消失,同时常量N的设置应尽可能大,以免数组越界。 在假设三棵树的掉落果子数相同时,要输出编号1这儿也需要考虑到位。 小明种苹果(续) 201909-2 试题名称: 小明种苹果(续) 时间限制: 1.0s 内存限制: 512.0MB 问题描述:
#include<iostream> #include<cstring> using namespace std; int main() { int n,i,x,j; int U[1001]; int a,b; memset(U,0,sizeof(U)); int T=0,D=0,E=0; cin>>n; for(i=0;i<n;i++) { cin>>x; if(x>0) { cin>>a; for(j=2;j<x+1;j++) { cin>>b; if(b<=0) { a=a+b; } else if(a!=b) { U[i]=1; a=b; } } if(U[i]==1)D++; T=T+a; } } if(n>2) { for(i=0;i<n;i++) { if(U[(i-1+n)%n]==1&&U[i]==1&&U[(i+1)%n]==1) E++; } } cout<<T<<" "<<D<<" "<<E; } 本题的坑:由于考试会刚做完第一题,所以第二题会多设置数组,其实并不,设置一个数组用来统计是否有苹果掉落,输入的时候也无需设置数组。数组初始化利用函数memset(U,0,sizeof(U)),本身memset函数无需头文件,但是sizeof,是测试数组长度的,需要头文件。。