阅读训练

题目描述
一天晨晨在做阅读训练。她拿了一本包括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
",b[i]);
                break;
            }
        }
    }
    return 0;
}

应该是复杂了点。。。。。

原文地址:https://www.cnblogs.com/skyleafcoder/p/12319580.html