![](https://img-blog.csdnimg.cn/20200310120300242.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0OTUwMDQy,size_16,color_FFFFFF,t_70)
满分代码
/*
测试用例
input:
4
4 74 -7 -12 -5
5 73 -8 -6 59 -4
5 76 -5 -10 60 -2
5 80 -6 -15 59 0
output:222 1 0
input:
5
4 10 0 9 0
4 10 -2 7 0
2 10 0
4 10 -3 5 0
4 10 -1 8 0
output:39 4 2
*/
#include<iostream>
using namespace std;
int main()
{
int n, m, data, tree_sum;
int T = 0, D = 0, E = 0;
cin>>n;
int *arr = new int[n]; // 标记数组记录发生苹果掉落的苹果树,值为1则发生掉落,0则没有掉落
for(int i = 0; i < n; i++)
{
arr[i] = 0; // 标记数组初始化
cin>>m>>tree_sum;
// 每棵数的第二个值为第i课苹果树的苹果个数
for(int j = 1; j < m; j++)
{
cin>>data; // 键入蔬果情况或者当前苹果树苹果个数
if(data > 0 && data != tree_sum) // 发生掉落
{
arr[i] = 1;
tree_sum = data;
}
else if(data < 0) // 发生蔬果
tree_sum += data;
}
T += tree_sum; // 记录所有苹果树剩余苹果树
}
int s_ind, t_ind;
for(int i = 0; i < n; i++)
{
if(arr[i] == 1)
D++;
s_ind = (i + 1) % n; // 这个是亮点,类似于循环队列求top或者base
t_ind = (i + 2) % n;
if(arr[i]==1 && arr[s_ind]==1 && arr[t_ind]==1) // 相邻
E++;
}
cout<<T<<" "<<D<<" "<<E<<endl;
return 0;
}