踩坑指南:
1.注意小于3棵树的情况
2.不要联想
3.运用模拟的思想,通过此关
代码实现:
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int p[1003];
int tree[1003];
int solve[1003];
bool fall[1003];
int isfalls(int i, int n)
{
for (int j = 0; j<3; j++)
{
if (fall[(i + j) % n] == false)return j;
}
return -1;
}
int main()
{
int a;
int n = 4, m;
int sum = 0, falls = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &m);
scanf("%d", &a);
solve[i]=a;
fall[i]=false;
for (int j = 0; j < m - 1; j++)
{
scanf("%d", &a);
if (a <= 0)
{
solve[i] += a;
}
else if (solve[i] != a)//苹果掉落
{
fall[i] = true;
//falls++;
solve[i] = a;
}
}
if(fall[i]== true)falls++;//错误原因:请不要再内层循环重复累加
//printf("%d",solve[i]);
sum += solve[i];
}
int zu = 0;
if (n >= 3)
{/*
fall.push_back(true);
fall.push_back(true);
fall.push_back(false);
fall.push_back(true);
*/
zu = 0;
for (int i = 0; i < n; i++)
{
m = isfalls(i, n);
if (m == -1)
{
zu++;
}
else
{
i += m;
}
}
}
printf("%d %d %d\n", sum, falls, zu);
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
*/