zzuli2460: 楼上真的是签到题

http://acm.zzuli.edu.cn/problem.php?id=2460

题目描述


        俗语说,美酒虽好,不要贪杯哦。今天我们的小博开始对美酒产生了兴趣,准确点说是倒酒:他拿来一堆酒杯,把他们摆成了金字塔形状,第一层一个,第二层两个,第三层三个。。。第n层n个,形状如图所示:
                                                       
然后小博搬来很多箱箱82年的红酒(小博是位土豪),开始从金字塔顶层开始倒酒
已知每秒钟倒出的酒量正好能装满一杯,当一个酒杯注满酒后,酒就会顺着被子流下来,并均匀地分向下一层的两个酒杯。
如果最底层的酒杯注满了,酒会顺着杯子流到桌子上。为了方便起见,这里不考虑酒在流的过程中停留在杯沿的部分和挥发的部分,并假设酒的流速是足够快的。
现在,小博想知道,如果他在t秒后停止倒酒,金字塔中会有多少个已经被注满的酒杯?

输入

测试数据有多组,每个测试数据占一行
对于每组测试数据,一行两个整数 n 和 t (1≤n≤10,0≤t≤10000),分别表示金字塔n层  和   倒酒时间为t秒

输出

对于每组测试数据,输出t秒后处于满的状态的酒杯数量。输出占一行。

样例输入

3 5
3 7

样例输出

4
6
#include<stdio.h>
#include<string.h>
#define N 20
double a[N][N];
int main()
{
	int n,i,j,t,ans;
	while(scanf("%d%d",&n,&t)!=EOF)
	{
		memset(a,0,sizeof(a));
		ans=0;
		a[1][1]=t;
		for(i=1;i<=n;i++)
			for(j=1;j<=i;j++)
			{
				a[i+1][j]+=(a[i][j]-1)/2.0;
				a[i+1][j+1]+=(a[i][j]-1)/2.0;
			}
		for(i=1;i<=n;i++)
			for(j=1;j<=i;j++)
				if(a[i][j]>=1)
					ans++;
		printf("%d
",ans);		
	}
	return 0;
}
原文地址:https://www.cnblogs.com/zyq1758043090/p/11852840.html