思路: 整体就是个模拟,注意它的掉落的意思是除疏果以外的操作使苹果掉落,即更新苹果个数时发现与自己统计的个数不一样。
代码:
#include <cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
#include<map>
using namespace std;
const int N = 1005;
int a[N];
bool vis[N];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int m;
cin>>m;
for(int j=1;j<=m;j++)
{
int x;
cin>>x;
if(x<=0)
a[i]+=x;
else
{
if(x<a[i]) //发生苹果掉落
vis[i]=1;
a[i]=x;
}
}
}
int sum=0,num=0,ansthree=0; //总数,苹果掉落棵树,三元组个数
vis[0]=vis[n];
vis[n+1]=vis[1];
for(int i=1;i<=n;i++)
{
sum+=a[i];
if(vis[i])
num++;
if(vis[i-1] && vis[i] && vis[i+1])
ansthree++;
}
cout<<sum<<" "<<num<<" "<<ansthree<<endl;
return 0;
}