题解 | #[NOIP2017]图书管理员#

[NOIP2017]图书管理员

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

思路

  1. 使用快排 quick_sort 进行从小到大排序
  2. 遍历数组,使用 mod 计算最后 len 位是否匹配,如果匹配则输出;如果遍历结束没有匹配,输出-1。

代码

#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

void quick_sort(vector<int>& nums, int l, int r) {
    if (l >= r) return;
    int i = l - 1, j = r + 1;
    int x = nums[(l + r) / 2];
    while (i < j) {
        do i++; while (nums[i] < x);
        do j--; while (nums[j] > x);
        if (i < j) swap(nums[i], nums[j]);
    }
    quick_sort(nums, l, j), quick_sort(nums, j + 1, r);
}

int main() {
    int n, q;
    cin >> n >> q;
    vector<int> nums(n);
    for (int i = 0; i < n; i++) {
        cin >> nums[i];
    }
    quick_sort(nums, 0, n - 1);
    int len, need;
    for (int i = 0; i < q; i++) {
        cin >> len >> need;
        int j = 0, mod = pow(10, len);
        for (; j < n; j++) {
            if (nums[j] % mod == need) {
                cout << nums[j] << endl;
                break;
            }
        }
        if (j == n) {
            cout << -1 << endl;
        }
    }
    return 0;
}
全部评论

相关推荐

10-25 12:05
已编辑
湖南科技大学 Java
若梦难了:我有你这简历,已经大厂乱杀了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务