50分
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdio>
using namespace std;
const int N = 1e4+10;
int a[N];
int b[N];//标记数组
int main(void)
{
int n;
scanf("%d",&n);
memset(b,0,sizeof(b));
int sum = 0;//最终的苹果数
int k = 0;//标记掉落的苹果树个数
int i;
for(int i=0; i<n; i++){
int m;
scanf("%d",&m);
scanf("%d",&a[0]);//初始的苹果个数
int x = a[0];//x是每棵树初始的苹果数
int count = 0;//每棵树掉落的苹果数
for(int j=1; j<m; j++){
scanf("%d",&a[j]);
if(a[j] > 0){//正数,进行第二次统计,表示苹果掉落,更新
a[0] = a[j]; //现在苹果树上的苹果个数
if((x-a[j]) > count){//有苹果掉落
x = a[0];//更新
b[i] = 1;//标记
k++;
}
}else{//进行了疏果
count += abs(a[j]);
a[0] += a[j];
}
}
sum += a[0];
//cout << "sum " << sum << " count " << count <<" k " << k << " b[i] " << b[i] << endl;//过程
//cout << "x " << x << endl;
}
int sss = 0;//连续的
for(int ss=0; ss<n-2; ss++){
if(b[ss]==1 && b[ss+1]==1 && b[ss+2]==1){
sss++;
}
}
if(b[n-2]==1 && b[n-1]==1 && b[0]==1){
sss++;
}
if(b[n-1]==1 && b[0]==1 && b[1]==1){
sss++;
}
printf("%d %d %d",sum,k,sss);
return 0;
}
本文介绍了一种用于模拟苹果树管理的算法,通过输入每棵树的初始苹果数量和一系列操作,包括苹果掉落和疏果,来计算最终的苹果总数、掉落的苹果树数量以及连续掉落的苹果树次数。算法使用了C++实现,涉及数组和条件判断。
5860

被折叠的 条评论
为什么被折叠?



