小明种苹果(续)第十七次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;
 } 
01-23 02:50