#include<bits/stdc++.h>
using namespace std;
int N,m,n,sum,ans,bns;
int main()
{
cin >> N;
int a[N+1]={0};
int b[N+1]={0};
for(int i=1;i<=N;i++)
{
cin >> m;
for(int j=0;j<m;j++)
{
cin >> n;
if(n>0)
{
if(!j)
a[i]=n;
else
{
if(a[i]!=n)
{
b[i]=1;
a[i]=n;
}
}
}
else
{
a[i]+=n;
}
}
}
for(int i=1;i<=N;i++)
{
sum+=a[i];
if(b[i])
ans++;
}
for(int i=1;i<=N-2;i++)
{
if(b[i]&&b[i+1]&&b[i+2])
bns++;
}
if(b[N-1]&&b[N]&&b[1])
bns++;
if(b[N]&&b[1]&&b[2])
bns++;
cout << sum << " " << ans << " " <<bns;
return 0;
}
用a数组存储每棵树的果数,b数组标记是否落果
N棵树,每棵树m个操作,第一个操作肯定是统计,所以直接赋值给a数组,之后如果大于零,就比较是否与a数组相等,不相等说明落果了;如果小于零,就与a数组求和表示减去
a数组求和表示果的总数,b数组非零个数和表示落果的棵数和,遍历b数组看是否有连续三个非零(因为用的数组,而果树是环形排列,所以有两种情况需特殊处理,即N-1,N,1 和 N ,1,2