JZOJ_7.8C组第一题 音乐节拍

题意

给出n种音乐和它们持续的时间(从0开始),p个问题,求出每个问题中时间t的时候是哪一种音乐。

思路

求出每种音乐结束的时间,给问题排一下序,判断一下就好了。

代码

#include<cstdio>
#include<algorithm>
#define N 50001
using namespace std;
int n,m,mu[N],a,b;
struct node{
    int q,x,ans;
}que[N];
bool cmp1(node x,node y) {return x.q<y.q;}
bool cmp2(node x,node y) {return x.x<y.x;}
int main()
{
    freopen("mnotes.in","r",stdin);
    freopen("mnotes.out","w",stdout);
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++)
    {
        scanf("%d",&a);
        mu[i]=a+b-1;//求结束的时间
        b=mu[i]+1;
    }
    for (int i=1;i<=m;i++)
        scanf("%d",&que[i].q),que[i].x=i;//x记录读入时的顺序
    sort(que+1,que+m+1,cmp1);
    int i=1,j=1;//i指向问题,j指向音乐
    while (i!=m+1)
    {
        while (que[i].q<=mu[j]&&i!=m+1) 
        {
            que[i].ans=j;
            i++;
        }
        j++;
    }
    sort(que+1,que+m+1,cmp2);//排回来
    for (int i=1;i<=m;i++)
        printf("%d\n",que[i].ans);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值