Problem:打怪兽
Description:
树林里有n个怪兽,杀死第i个怪兽会消耗猎人ai的血量。当猎人的血量大于杀死怪兽需要消耗的血量,猎人可以击败怪兽,并减去相应血量。树林外有m个有自知之明的猎人,他们每个人都有一个初始血量,并按顺序去杀死怪兽(杀死第一个,然后杀死第二个,然后第三个…),因外他们有自知之明,所以他们想知道自己可以击败前几个怪兽,请你告诉他们。
注意:因为需要输入输出的数据比较多,请不要使用cin,cout(使用scanf,printf)。
Input:
第一行一个数T(T<=5),代表输入数据的组数。
每组数据第一行有两个整数n,m(n,m<=100,000),代表怪兽的数量和猎人的数量。
第二行有n个整数,第i个整数ai(1<=ai<=10000)代表杀死第i个怪物消耗的血量。
接下来有m行,每行一个整数代表这个猎人的初始血量c(1<=c<=1000,000,000)。
Output:
对每组数据输出m行,每行一个数代表每个猎人能够击败前几个怪兽。
Sample Input:
1
4 2
3 5 8 5
4
10
Sample Output:
1
2
Language:C
#include <stdio.h>
#define N 100010
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n,m;
scanf("%d%d",&n,&m);
int a[N],s[N];
int sum=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
s[i]=sum;
}
while(m--)
{
long c;
scanf("%ld",&c);
int max=0;
for(int i=1;i<=n-1;i++)
{
if(c-s[i]>a[i+1] ) max=i;
else break;
}
printf("%d\n",max+1);
}
}
return 0;
}