1686. 珅泽教育CSP-J第一轮模拟考第六套 第 35 题
珅泽教育CSP-J第一轮模拟考第六套 第 35 题
二、阅读程序·第三题(选择题)
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;
}
};
若调用 put(k, v) 时已经存在相同的键 k 时,以下哪一种处理策略最符合上述代码的逻辑( )。
{{ select(1) }}
- 熔断(Breaker):抛出异常,向系统报告错误
- 回滚(Rollback):不做任何修改,撤销
put操作 - 覆盖(Rewrite):将键所对应的老值覆盖成新值
- 忽略(Ignore):对有可能出错的操作置之不理