ccf小明种苹果(续)
这个题目难度不大,可能有问题就是连续三个树为苹果掉落,我着重在这个部分讲一下
#include<bits/stdc++.h>
using namespace std;
struct node{
int flag;
int num;
int sum;
};
int main(){
int N;
cin >> N;
node a[N];
for(int i = 0; i < N; i ++){
a[i].flag = 0;
a[i].num = i + 1;
a[i].sum = 0;
}
for(int i = 0; i < N; i ++){
int m;
cin >> m;
int tt;
cin >> tt;
a[i].sum = tt;
for(int j = 0; j < m - 1; j ++){
int t1;
cin >> t1;
if(t1 <= 0){
a[i].sum += t1;
}
if(t1 > 0){
if(t1 != a[i].sum){
a[i].flag = 1;
a[i].sum = t1;
}
}
}
}
int sum = 0;
int count = 0;
for(int i = 0; i < N; i ++){
sum += a[i].sum;
if(a[i].flag == 1){
count ++;
}
}
cout << sum << " " << count << " ";
int sum2 = 0;
//从这里开始,我们要计算连续三个的树为苹果掉落的组数了
//首先将可以轻松正常遍历的进行遍历,每一次抓三组一起比较
//抓到倒数第三个
for(int i = 0; i <= N -3; i ++){
if(a[i].flag == 1 && a[i+1].flag == 1 && a[i+2].flag == 1){
sum2 ++;
}
}
//判断两种特殊情况
if(a[N-2].flag == 1 && a[N-1].flag == 1 && a[0].flag == 1){
sum2 ++;
}
if(a[N-1].flag == 1 && a[0].flag == 1 && a[1].flag == 1){
sum2 ++;
}
//输出
cout << sum2;
}
/*
4
4 74 -7 -12 -5
5 73 -8 -6 59 -4
5 76 -5 -10 60 -2
5 80 -6 -15 59 0
*/