二刷思路:输入的同时就算这棵树疏果后剩余果子数:遇到正数则直接调整为该正数,遇到负数则加上;求是否落果,遇到下一个正数时,若当前e[i]的值大于此正数值,说明落果了,否则没有。
注意审题,落果不是疏果,且最后一次统计后假设不再落果。
#include <iostream>
using namespace std;
int main()
{
int n,m,sum=0,a;
cin >> n;
int d[n];
for(int i=0;i<n;i++) d[i]=0;
for(int i=0;i<n;i++)
{
int c=0;
cin >> m;
for(int j=0;j<m;j++)
{
cin >> a;
if(a>0)
{
if(a<c) d[i]=1;
c=a;
}
else
{
c+=a;
}
}
sum+=c;
}
int drop=0,e=0;
for(int i=0;i<n;i++)
{
if(d[i]==1) drop++;
if(d[i]==1&&d[(i+1)%n]==1&&d[(i+2)%n]==1) e++;
}
cout << sum << " " << drop << " " << e << endl;
return 0;
}
测试数据:
4
4 74 -7 -12 -5
5 73 -8 -6 59 -4
5 76 -5 -10 60 -2
5 80 -6 -15 59 0
5
4 10 0 9 0
4 10 -2 7 0
2 10 0
4 10 -3 5 0
4 10 -1 8 0