Jim的实验

Jim的实验

Jim的实验

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述
Jim进行一个实验来测量一些海绵状材料的湿度水平。实验是在一个封闭的房间进行,下图是从侧面来观察。房间的长度是N cm,在天花板上有N个滴水器。第一个滴水器固定在离左边墙的0.5cm处,每个滴水器距离1cm(如图)。同时在下面会有M个海绵,每个海绵的长度是一样的,都是长Lcm。每个海绵会吸收所以滴落在他上面的水滴。海绵的标号是从上到下的。 jim
输入
第一行包括一个整数T,代表有T组测试数据;
每组测试数据第一行包括两个数N(1<=N<=50),代表房间的长度;
接下来的一行包括N个整数,第i个数num_i代表第i个滴水器每分钟滴水量(0=<num<=60)。
第三行包括两个整数 M,L,分别代表海绵的个数,和海绵的长度(0<M<N);
接下来一行包括M个整数,第i个数dis_i代表第i个海绵左端离左边墙的距离(0<=dis<=N-L),(dis_i按降序给出);
输出
输出占一行,共M个数;ans_i代表第i个海绵每分钟吸收的水滴数。每个数用空格隔开。
样例输入
[/cpp]3
6
3 4 1 1 5 6
3 3
3 1 0
8
15 10 20 3 8 7 30 20
2 3
5 1
4
2 5 1 3
3 2
2 0 0
样例输出
[/cpp]12 5 3
57 33
4 7 0
提示
(提示:这组数据就是上图给出的那样,第一个海绵会吸收4,5,6滴水器的水滴,第二个海绵吸收2,3滴水器的水滴,第三个海绵吸收1滴水器的水滴)(提示:第一个海绵会吸收6,7,8滴水器的水滴,第二个海绵吸收2,3,4滴水器的水滴,滴水器1,5的水滴滴在地上,没海绵吸收)(提示:第一个海绵会吸收3,4滴水器的水滴,第二个海绵吸收1,2滴水器的水滴,第三个因为让第二个挡着,所以吸收不到水滴,即吸收数量为0);

这一题不难,但是三个new老是提示超时!没办法,优化了代码!更改为C语言,但是仍然一直不过,赛后好像是后台数据bug吧,后台更改过后,直接过了!
[cpp]
#include <stdio.h>
#include <string.h>
int main()
{
int T,N,M,L,i,j,sum;scanf(“%d”,&T);
int p[50],q[50],flag[50];
while(T–)
{
scanf(“%d”,&N);
memset(flag,0,N*sizeof(int));
for(i=0;i<N;i++) scanf(“%d”,&p[i]);
scanf(“%d %d”,&M,&L);
for(i=0;i<M;i++) scanf(“%d”,&q[i]);
for(i=0;i<M;i++)
{
sum=0;
for(j=q[i];j<L+q[i];j++)
{
if(flag[j]==0) {sum+=p[j];flag[j]=1;}
else continue;
}
printf(“%d “,sum);

}
printf(“\n”);
}
return 0;
}

[/cpp]