一、题目
二、解析
按着题目的要求写代码就好了(根据判断规则编写代码)。
三、代码
#include <iostream>
#include <cstring>
#define MX 10000
using namespace std;
int N;
//每棵树掉落的苹果的个数
int drop[MX];
int a[MX];
//T:剩下苹果总数
//D:掉落苹果的树的棵数
//E:相邻三棵树都掉苹果的组数
int T, D, E;
int main()
{
memset(drop, 0, sizeof(drop));
cin >> N;
T = 0;
D = 0;
E = 0;
for (int i = 0; i < N; i++) {
int m;
cin >> m;
for (int j = 0; j < m; j++)
cin >> a[j];
//最后一次统计苹果的个数
int lastCnt;
int lastCntInd;
//最后一次统计苹果后疏果的个数
int lastCut = 0;
for (int j = m - 1; j >= 0; j--) {
if (a[j] > 0) {
lastCnt = a[j];
lastCntInd = j;
break;
}
else
lastCut += a[j];
}
T += lastCnt + lastCut;
//cout<<lastCnt<<" "<<lastCut<<" "<<T<<endl;
//第一次统计苹果到最后一次统计苹果之间疏果的个数
int cut = 0;
for (int j = 1; j < lastCntInd; j++) {
if (a[j] <= 0)
cut += a[j];
}
//这棵树掉落苹果的个数
drop[i] = a[0] - lastCnt + cut;
//cout<<cut<<" "<<drop[i]<<endl;
}
//for(int i=0; i<N; i++)
// cout<<drop[i]<<" ";
//cout<<endl;
for (int i = 0; i < N; i++) {
if (drop[i] > 0)
D += 1;
if (drop[i] > 0 && drop[(i + 1) % N] > 0 && drop[(i + 2) % N] > 0)
E += 1;
}
cout << T << " " << D << " " << 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
输出:
222 1 0