#1682. 珅泽教育CSP-J第一轮模拟考第六套 第 31 题

珅泽教育CSP-J第一轮模拟考第六套 第 31 题

第三题

struct flat_map {
    struct {
        int key;
        int value;
    } bucket[65536];
    int size = 0;

    struct result {
        int index;
        bool hit;
    };
    result find(int begin, int end, int key) {
        if (begin == end)
            return {begin, false};
        else {
            int mid = begin + (end - begin) / 2;
            if (key < bucket[mid].key)
                return find(begin, mid, key);
            else if (bucket[mid].key < key)
                return find(mid+1, end, key);
            else
                return {mid, true};
        }
    }

    int get(int key) {
        result p = find(0, size, key);
        if (p.hit)
            return bucket[p.index].value;
        else
            return 0;
    }

    void put(int key, int value) {
        result p = find(0, size, key);
        for (int i = size; i > p.index; --i)
            bucket[i] = bucket[i - 1];
        size++;
        bucket[p.index].key = key;
        bucket[p.index].value = value;
    }
};

判断题

当调用 get(k) 后发现 k 不存在,flat_map 会为 k 分配一块内存并将它对应的值置为 0( )。

{{ select(1) }}

  • 正确
  • 错误