0
点赞
收藏
分享

微信扫一扫

吃瓜群众。

zhoulujun 2022-03-18 阅读 64

题目描述
某地总共有 M 堆瓜,第 i 堆瓜的数量为 Xi。现有 N 组群众现在想要吃瓜,第 i 组群众想要吃的瓜的数量为 Yi。现在对于每组想吃瓜的群众,需要在 M 堆瓜中查找对应数量的一堆瓜,并输出那堆瓜的编号,若找不到对应数量的一堆,则输出 0。

输入
输入共 3 行。

第一行两个整数 M,N。

第二行 M 个整数分别表示 X1,X2…XM。(保证各不相同)

第三行 N 个整数分别表示 Y1,Y2…YN。(保证各不相同)

输出
对于每个 Yi 输出一行一个整数为对应数量的瓜的编号,若没有对应数量的瓜,则输出 0。

样例输入
5 3
1 3 26 7 15
26 99 3
样例输出
3
0
2
数据规模与约定
时间限制:1 s

内存限制:256 M

100% 的数据保证 1≤M,N≤100,000,1≤Xi,Yi≤1,000,000,000

#include <stdio> 
#include <iostream>
#include <algorithm>
using namespace std;

struct waterm {
    int num, cnt;
};

bool cmp(waterm a, waterm b) {
    return a.cnt < b.cnt;
}

int main() {
    int m, n;
    waterm wm[100005];
    scanf("%d%d",&m,&n);
    for (int i = 0; i < m; i++) {
       scanf("%d",&wm[i].cnt);
        wm[i].num = i + 1;
    }
    sort(wm, wm + m, cmp);
    for (int i = 0; i < n; i++) {
        int t, l = 0, r = m - 1, f = 0;
        scanf("%d",&t);
        while (l <= r) {
            int mid = (l + r) / 2;
            if (wm[mid].cnt == t) {
                printf("%d
", wm[mid].num);
                f = 1;
                break;
            }
            if (wm[mid].cnt < t) {
                l = mid + 1;
            } else {
                r = mid - 1;
            }
        }
        if (!f) printf("0
");
    }
    return 0;
}
举报

相关推荐

0 条评论