树木是按照环形排列的
#include <iostream>
#include <stdio.h>
using namespace std;
//in
//树的颗数
//对每棵树的操作数量+具体操作(去果or重新统计),第一步一定是统计
//out
//剩余的苹果总数目,产生掉果的树的颗数,相邻的三棵树都掉果的组数(环形)(T,D,E)
int main()
{
FILE *stream1;
FILE *stream2;
freopen_s(&stream1, "input.txt", "r", stdin);
freopen_s(&stream2, "output.txt", "w", stdout);
int tree_num;
cin >> tree_num;
int flag[1010] = { 0 };
int T = 0;
int D = 0;
int E = 0;//D和E都要根据flag数组来计算。
for (int i = 0; i < tree_num; i++)
{
int num;//每一行整数的个数
int cur_num=0;//操作完成之后所剩的苹果数量,注意每一轮都需要置零
cin >> num;
bool first = true;//注意每一轮都要把它变成true
for (int j = 0; j < num; j++)
{
int temp;//具体的操作
cin >> temp;
if (first)
{
cur_num = temp;
first = false;
}
else
{
if (temp > 0)
{
if (cur_num != temp)
{
flag[i] = 1;
cur_num = temp;
}
else
{
cur_num = temp;
}
}
else
{
cur_num += temp;
}
}
}
T += cur_num;
D += flag[i];
}
for (int i = 1; i < tree_num - 1; i++)
{
if (flag[i] == 1 && flag[i - 1] == 1 && flag[i + 1] == 1)
{
E++;
}
}
if (flag[0] == 1 && flag[1] == 1 && flag[tree_num - 1] == 1)
{
E++;
}
if (flag[0] == 1 && flag[tree_num - 2] == 1 && flag[tree_num - 1] == 1)
{
E++;
}
cout << T << " " << D << " " << E << endl;
fclose(stdin);
fclose(stdout);
}