题解 | #[USACO 2009 Dec S]Music Notes#

[USACO 2009 Dec S]Music Notes

https://ac.nowcoder.com/acm/problem/24866

//使用前缀和记录在什么时候音符开始演奏,然后在通过二分查找值的范围即可。
#include <bits/stdc++.h>


using namespace std;
const int maxn = 50000+10;
int N, Q;
int ying_fu[maxn];

int find_pos(int x) {
    int l = 1, r = N;
    while (l<r) {
        int mid = (l+r)/2;
        if (ying_fu[mid]>=x) r = mid;
        else l = mid+1;
    }
    return l;
}

int main() {
    int k;
    cin>>N>>Q;
    //计算前缀和
    for (int i=1;i<=N;i++) {
        ying_fu[i] = ying_fu[i-1];
        scanf("%d", &k);
        ying_fu[i] += k;
    }
    while (Q--) {
        scanf("%d", &k);
        int pos = find_pos(k);
        if (ying_fu[pos]==k) pos++;
        printf("%d\n", pos);
    }
    
    return 0;
}

全部评论

相关推荐

08-19 18:59
已编辑
绍兴文理学院 Java
一只末影酱:一、1w+qps嘛感觉数据有点太夸张了 二、还有就是99.95%这些,本身大部分学生做的小项目基本是100%,因为量太小了,网络抖动问题也基本模拟不出来,感觉这些不太好写 三、你这些项目,都是一个月就做完了,更抽象了,也就是大概意味着,没有技术调研,没有上线测试,
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务