C1-F-超体-简单版

    科技2025-06-08  9

    题目

    题目描述 要么永生,要么繁殖。

    在环境舒适的 X 星球,细胞们选择了繁殖,并且把知识一代一代传承下去。

    在 t=1 秒时,有一个新生的细胞在混沌中诞生了。

    对于每个细胞,当它诞生 a 秒后就会变得成熟。 每个成熟的细胞每秒都会分裂一次(包括它刚刚成熟的那一时刻)。每次分裂会产生一个新生细胞。 每个细胞在它的成熟期只能分裂 b 次。在最后一次分裂之后,细胞会立刻进入衰老期。 进入衰老期再过 c 秒后,细胞会立刻死亡。 在 t=T 秒时,你能计算出 X 星球一共有多少活着的细胞吗?

    输入 一行,仅四个整数,相邻整数间由一个空格隔开,四个整数分别是上文中的 a,b,c,T.

    输出 一行,仅一个整数,在 t=T 秒时活着的细胞的总数。保证答案在 long long 范围内。

    输入样例1 1 1 1 2 输出样例1 2 输入样例2 1 1 1 3 输出样例2 3 输入样例3 1 1 1 5 输出样例3 3 数据范围 a,b,c,T∈[1,10]

    思路分析

    乍一看这个题貌似是斐波那契数列,但实际上由于本题数据量较小,可以使用其他方法。 由于a,b,c都在[1,10]之间,所以细胞的年龄最大为30,可以使用一个长度为30的数组存储每一个年龄段细胞的数量。

    AC代码

    #include<stdio.h> long long num[35]={0}; int main() { int i,j,a,b,c,t,len; scanf("%d%d%d%d",&a,&b,&c,&t); len=a+b+c; num[0]=1; for(i=2;i<=t;i++) { for(j=len-1;j>=1;j--) num[j]=num[j-1]; num[0]=0; for(j=a;j<a+b;j++) num[0]+=num[j]; } long long ans=0; for(i=0;i<len;i++) ans+=num[i]; printf("%lld",ans); }
    Processed: 0.010, SQL: 8