思路:每一行数据单独处理,没必要将所有数据都存储起来。用flag数组统计每棵树是否有落果。判断落果方法,先将果数初始化为sum,根据输入的数x判断应该进行的操作,如果x小于等于0,进行疏果,sum-=x;如果x大于0,说明进行的重新统计了果数,比较其与sum的大小判断是否有落果,最后统计落果树的数目。判断落果有几组时,由于树是一个园,故下标应用取余的方法进行头尾循环,e.g.:(i—1+n)% n,快速简单。
代码实现:
#include<iostream>
using namespace std;
const int N = 1000;
int flag[N];
int main(){
int n,T = 0,D = 0,E = 0;
cin>>n;
for(int i = 0; i < n; i++){
int m,sum;
cin>>m>>sum;
for(int j = 1; j < m; j++){
int x;
cin>>x;
if(x <= 0){
sum += x;
}
else if(x < sum){
sum = x;
flag[i] = 1;
}
}
T += sum;
if(flag[i] == 1)
D++;
}
if(n >= 3){
for(int i = 0; i < n; i++){
if(flag[i] && flag[(i-1+n)%n] && flag[(i+1+n)%n])
E++;
}
}
cout<<T<<‘ ‘<<D<<‘ ‘<<E;
return 0;
}