#include <cstdio>
#include <algorithm>
using namespace std;
struct Tree{
int sum;
bool isfall;
};
int main(){
int n;
scanf("%d", &n);
Tree t[n];
for(int i=0; i<n; i++){
int num;
t[i].isfall = false;
scanf("%d %d", &num, &t[i].sum);
for(int j=0; j<num-1; j++){
int temp;
scanf("%d", &temp);
if(temp <= 0){
t[i].sum += temp;
}else{
if(temp < t[i].sum){
t[i].isfall = true;
t[i].sum = temp;
}
}
}
}
int sum = 0;
int fall = 0;
for(int i=0; i<n; i++){
sum += t[i].sum;
if(t[i].isfall){
fall++;
}
}
int e = 0;
if(t[n-2].isfall && t[n-1].isfall && t[0].isfall){
e++;
}
if(t[n-1].isfall && t[0].isfall && t[1].isfall){
e++;
}
int flag = 0;
for(int i=0; i<=n-3; i++){
if(t[i].isfall){
if(t[i+1].isfall && t[i+2].isfall){
e++;
}
}
}
printf("%d %d %d", sum, fall, e);
return 0;
}
也是跟着题目意思写就行了,没什么难度,每棵树的设置一个变量记录是否掉落。
求三个连续掉落树的个数,因为苹果树围成一个圆,所以末尾两棵树、开头一棵树,末尾一棵树、开头两棵树这两种情况需要特判一下。