比较简单的模拟题,大家可以看一下代码中的注释,应该可以理解解题思路
#include<iostream>
#include <algorithm>
using namespace std;
typedef long long int ll;
int apple[1005][1005];
int rem[1005];
bool down[1005]; //初始值是false
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int N;//苹果树的棵树
int D=0;//发生苹果掉落的苹果树的数量
ll T=0; //剩余的果子数
ll E=0; //连续发生掉落的组数
cin>>N;
for(int i=1;i<=N;i++){
int m;
cin>>m;
bool flag = false; //判断这颗苹果树是否发生了苹果掉落
for(int j=1;j<=m;j++){
cin>>apple[i][j];
if(apple[i][j]>0){//及时更新苹果树上的苹果数量
if(rem[i]>apple[i][j]){//发生了苹果掉落事件
flag = true;
}
rem[i]=apple[i][j];
}else{
rem[i]+=apple[i][j];
}
if(apple[i][j]<0){
}
}
if(flag){//记录下发生苹果掉落的果树
++D;
down[i]= true;
}
T+=rem[i];//及时更新剩余的果子总数
}
down[N+1]=down[1];
down[N+2]=down[2];
for(int i=1;i<=N;i++){
if(down[i]&&down[i+1]&&down[i+2]){
++E;
}
}
cout<<T<<" "<<D<<" "<<E<<endl;
return 0;
}