解题思路:
1.题目并不复杂,要分清楚疏果操作和苹果自然掉落是不一样的,疏果不是掉落,只有重新统计后的果子数量比前面的果子数量少,才是有掉落
2.苹果树是一个圈,最后两棵树要和前两棵树判断是否有连续三棵树都有掉落
3.要记录最初苹果数量作为初始值,方便后续比较
#include<bits/stdc++.h>
using namespace std;
int main()
{
int N;
cin>>N;
int flag[N+5]={0}; //标记是否有苹果掉落
int drop=0; //有苹果掉落的树的数量
int apple=0; //记录最终数上的苹果数量
int t=0; //连续三棵树掉落的组数
for(int k=1;k<=N;k++)
{
int m;
cin>>m;
int a[m+5];
cin>>a[1];
int num=a[1]; //最初苹果数量
for(int i=2;i<=m;i++)
{
cin>>a[i];
if(a[i]>0)
{
if(a[i]<num) //有苹果掉落
{
flag[k]=1;
}
num=a[i]; //重新统计数量
}
else //进行疏果操作
{
num+=a[i]; //去掉苹果
}
}
apple+=num;
if(flag[k]==1) drop++; //有苹果掉落
}
for(int i=1;i<=N-2;i++) //是N-2不是N
{
if(flag[i]==1&&flag[i+1]==1&&flag[i+2]==1) //连续三棵树(除了最后两棵要单独判断)
{
t++;
}
}
if(flag[N-1]==1&&flag[N]==1&&flag[1]==1) t++;
if(flag[N]==1&&flag[1]==1&&flag[2]==1) t++;
cout<<apple<<' '<<drop<<' '<<t;
return 0;
}