阅读训练
题目描述
一天晨晨在做阅读训练。她拿了一本包括n篇文章的小说集,第i篇文章包括bi (1≤bi≤100)页,已知晨晨每读一页都要花一分钟。假设晨晨开始阅读小说第一页的时间起点为0,她读第一篇文章从时间点0到时间点b1-1,第二篇文章从时间点b1到时间点b1+b2-1,依此类推…,阅读第n篇文章的时间点b1+b2+…+bn-1到时间点b1+b2+…+bn-1+bn-1。那么,当在时间点t时(0≤t<阅读总时间),你知道晨晨在阅读第几篇文章吗?
其实晨晨的好奇心比你还强,虽然阅读还未正式开始,但她很想知道在未来Q个时间点时,自己分别会在阅读哪一篇文章?
严重偏文科的晨晨,感觉这个问题很棘手,就想请你这个电脑高手帮忙。
例如:如果一本书包括三篇文章:第一篇文章2页,第二篇文章1页,第三篇文章3页,那么时间点与所读文章(序号)的关系如下图所示:
输入
第一行:包括空格分开的两个整数N和Q (其中1≤n≤100,1≤Q≤1000) 。
接下来的N行,每行一个整数代表每篇文章的页数。
再接下来是Q行,每行一个整数代表一个时间点。
输出
总共Q行,每行一个数,代表按输入顺序的每个时间点正在阅读的文章序号。
样例输入
复制样例数据
3 5
2
1
3
2
3
4
0
1
样例输出
2
3
3
1
1
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,q,i,j,t=1,x,y;
scanf("%d %d",&n,&q);
int a[n],b[5000];
b[0]=1;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
y=t-1;
t=t+a[i];
t=t-1;
for(j=y;j<t;j++)
{
b[j]=i+1;
}
t=t+1;
}
for(j=0;j<q;j++)
{
scanf("%d",&x);
for(i=0;i<t;i++)
{
if(x==i)
{
printf("%d\n",b[i]);
break;
}
}
}
return 0;
}
应该是复杂了点。。。。。