思路
由子任务说明可知,每一行除了mi之外,最多有1000个数据,因此定义一个数组apple[1000]用以存放每一行的数据。因为N最大值为1000,也就是说最多有1000棵苹果树,因此定义数组drop[1000]用以存放每棵树是否有苹果掉落的信息。每当把一棵树的统计或疏果情况输入完成之后,便开始进行数据处理,包括判断此棵树是否有落果的情况发生,最后还有多少个苹果。
最后对数组drop进行处理,定义一个flag变量,让其初始值为0,遍历drop数组,若为1,则让flag++,否则flag置0,判断flag是否大于等于3,同时注意所有苹果树是围成一个圈的。
源代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int N;
int m;
int T = 0, D = 0, E = 0;
int sum = 0; //每棵苹果树最后剩下的苹果个数
int apple[1000]; //记录某棵树的疏果或统计情况
int drop[1000] = { 0 }; //记录每棵树是否有落果,若有,则为1,否则为0
cin >> N;
for (int i = 0; i < N; i++) {
cin >> m;
for (int j = 0; j < m; j++) {
cin >> apple[j];
}
sum = apple[0];
for (int j = 1; j < m; j++) {
if (apple[j] > 0) {
if (sum != apple[j]) {
drop[i] = 1;
sum = apple[j];
}
}
else {
sum += apple[j];
}
}
T += sum;
}
int flag = 0;
for (int i = 0,j = 0; i < N + 2; i++) {
if (drop[j] == 1) {
flag++;
if(i < N)
D++;
}
else
flag = 0;
if (flag >= 3)
E++;
j++;
j = j % N;
}
cout << T << " " << D << " " << E;
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
*/