1003 神奇的植物

来源:互联网 发布:百度网盘mac版是什么 编辑:程序博客网 时间:2024/05/16 19:00
 

描述

前不久,探险队b前往inst沙漠进行考察。他们在沙漠中发现了一种生命力十分强悍的植物。这种植物从种子到发芽只需要1天时间,而从发芽的第x天开始, 一直到第y天(包括第y天),每天又都会繁殖出一粒种子,每棵植物都会在发芽的第z天时枯萎死亡。因为探险队b以前在营地里并没有见过这种植物,于是他们 取了一颗种子放在他们的营地里(这一天叫做第0天),他们想知道第n天的时候营地里这种神奇的植物(不包括种子)的棵数m。但是这个数太大了,他们现在只 想知道m的最后8位是多少。

输入

题目包含多个测试数据,每个测试数据只有一行,包含四个正整数x,y,z,n,用空格分开。其中0 < x <= y < z <= 2500,0 < n <= 2500。题目以四个整数0 0 0 0结束输入,这一行不用处理。

输出

每个测试数据输出一行,包含一个正整数,表示m的最后8位,m不足八位的输出m。输出不含前导0。

样例输入

1 2 3 4
0 0 0 0

样例输出

5

解题思路:
纯粹的模拟题,建立两个数组,
F[2501],f[2501];其中F用来存放所有存活下来的植物棵树,f用来存放新产生的种子个数。按照题目说明即可求解。注意要对100000000取余
#include <stdio.h>long long F[2501],f[2501];int main(){int x,y,z,n,i,j;scanf("%d %d %d %d",&x,&y,&z,&n);while(x!=0 && y!=0 && z!=0 && n!=0){for(i=0;i<2502;i++){F[i]=f[i]=0;}f[0]=1;for(i=0;i<n;i++){if(i<z-1)F[i+1]=(F[i]+f[i])%100000000;else {F[i+1]=(F[i]+f[i]-f[i-z+1])%100000000;if(F[i+1]<0)F[i+1]+=100000000;}if(i<x-1)f[i+1]=0;else if (i<y-1){for(j=0;j<=i-x+1;j++){f[i+1]+=f[j];f[i+1]=f[i+1]%100000000;}}else {for(j=i-y+1;j<=i-x+1;j++){f[i+1]+=f[j];f[i+1]=f[i+1]%100000000;}}}printf("%lld\n",F[n]%100000000);scanf("%d %d %d %d",&x,&y,&z,&n);}return 0;}

原创粉丝点击