CCF 20190902 小明种苹果续

本文介绍了一种用于果园中统计落果数量的高效算法。通过使用flag数组记录每棵树是否发生落果,以及循环判断相邻树木的状态,可以快速计算总的果数、落果树的数量以及连续三棵树落果的情况。该算法利用了头尾循环的特性,避免了大量数据存储,提高了计算效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路:每一行数据单独处理,没必要将所有数据都存储起来。用flag数组统计每棵树是否有落果。判断落果方法,先将果数初始化为sum,根据输入的数x判断应该进行的操作,如果x小于等于0,进行疏果,sum-=x;如果x大于0,说明进行的重新统计了果数,比较其与sum的大小判断是否有落果,最后统计落果树的数目。判断落果有几组时,由于树是一个园,故下标应用取余的方法进行头尾循环,e.g.:(i—1+n)% n,快速简单。


代码实现:

#include<iostream>

using namespace std;

const int N = 1000;
int flag[N];

int main(){
    int n,T = 0,D = 0,E = 0;
    cin>>n;
    for(int i = 0; i < n; i++){
        int m,sum;
        cin>>m>>sum;
        for(int j = 1; j < m; j++){
            int x;
            cin>>x;
            if(x <= 0){
                sum += x;
            }
            else if(x < sum){
                sum = x;
                flag[i] = 1;
            }
        }
        T += sum;
        if(flag[i] == 1)
            D++;
    }
    if(n >= 3){
        for(int i = 0; i < n; i++){
            if(flag[i] && flag[(i-1+n)%n] && flag[(i+1+n)%n])
                E++;
        }
    }
    cout<<T<<' '<<D<<' '<<E;
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值