Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 244 Accepted Submission(s): 45
25
Hint
case 1:刚开始有1个士兵(视为第0天培育成功),那么士兵从第1天到第2天都能取得有效的克隆材料,并在第3天和第4天分别培育出一个克隆人士兵,该士兵在第5天死亡(当天不输出伤害),所以第四天一共有两个士兵存在,当天输出了10点伤害。
#include<stdio.h> int D,A,K,X,N; __int64 sum(__int64 *a) { int i; __int64 sum=0; for(i=1;i<=D;i++)//D天前所有士兵造成的伤害 sum+=a[i]; return sum; } void datatype_birth(__int64 *data,__int64 *people) { int i; for(i=K;i>0;i--)//每过一天,相当于把材料向后移了一天 data[i]=data[i-1]; for(data[0]=0,i=1;i<=A;i++)//材料的数量就是看这天有多少人 data[0]+=people[i]; people[0]=data[K];//第k天的的材料变成了士兵; } void datatype_death(__int64 *people) { int i; for(i=D+1;i>0;i--)//D天之后的士兵都死掉了 people[i]=people[i-1]; } int main() { int t; int i; __int64 people[105],data[105];//people指有多少人,data指材料; __int64 attack;//造成的攻击伤害 scanf("%d",&t); while(t--) { scanf("%d%d%d%d%d",&N,&D,&A,&K,&X); memset(data,0,sizeof(data)); memset(people,0,sizeof(people)); people[1]=N; for(attack=0,i=1;i<=X;i++)//求计算到X天的攻击总和 { datatype_birth(data,people); attack+=sum(people)*5; datatype_death(people); } printf("%I64d\n",attack); } return 0; }