小明种苹果(续)第十七次CCF认证
解题思路
进行模拟即可
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=1007;
struct node
{
ll init, dsum;
bool drop; //用来记录这棵树是否发生苹果掉落
}a[maxn];
int n, m;
int main()
{
ll tmp;
scanf("%lld", &n);
for(int i=1; i<=n; i++)
{
scanf("%d", &m);
for(int j=1; j<=m; j++)
{
scanf("%lld", &tmp);
if(j==1) //第一次要进行初始化
{
a[i].init=tmp;
a[i].drop=false;
continue;
}
if(tmp>0)
{
if(a[i].init!=tmp) //判断是否发生苹果掉落
{
a[i].dsum+=a[i].init-tmp;
a[i].init=tmp;
a[i].drop=true;
}
}
else
{
a[i].init += tmp; //注意这个tmp是非正数
}
}
}
ll sum=0, nums=0, ans=0;
for(int i=1; i<=n; i++)
{
sum+=a[i].init;
if(a[i].drop)
nums++;
}
printf("%lld %lld ", sum, nums);
for(int i=1; i<=n; i++)
{
if(a[i].drop)
{
if(i==1 && a[n].drop && a[i+1].drop)
ans++;
else if(i==n && a[i-1].drop && a[1].drop)
ans++;
else if(a[i-1].drop && a[i+1].drop)
ans++;
}
}
printf("%lld\n", ans);
return 0;
}