#3204. 26东方茂CSPJ暑期集训阶段测试客观题二
26东方茂CSPJ暑期集训阶段测试客观题二
1. 对一个长度为 n 的有序数组做二分查找,最坏情况下比较次数约为?
{{ select(1) }}
- n
- log₂n
- n·log₂n
- n²
2. 用二分找"第一个 ≥ x 的位置"(lower_bound 思想),正确写法是?
{{ select(2) }}
- while(l<=r),命中就返回
- 每次 r=mid-1 或 l=mid+1,找精确相等
- while(l<r):if(a[mid]>=x) r=mid; else l=mid+1; 结束时 l 即答案
- 从头到尾线性扫描
3. 下列最适合用"二分答案"解决的是?
{{ select(3) }}
- 求两个数的最大公约数
- 判断一个数是不是素数
- 对数组求和
- 把 n 个物品分成 m 段,最小化每段和的最大值
4. 单链表中 p 指向某结点,要在其后插入新结点 s,正确顺序是?
{{ select(4) }}
- p->next = s; s->next = p->next;
- s->next = p->next; p->next = s;
- s->next = p; p->next = s;
- p->next = s->next; s->next = p;
5. 静态链表中 nxt[i] 表示什么?链表相比数组的主要代价是?
{{ select(5) }}
- nxt[i] 是结点 i 的值;链表更省内存
- nxt[i] 是链表长度;链表插删更慢
- nxt[i] 是结点 i 后继的下标;链表不支持 O(1) 随机访问
- nxt[i] 是结点 i 前驱的下标;链表不能存整数
6. 入栈顺序为 1,2,3,4,下列哪个不可能是合法出栈序列?
{{ select(6) }}
- 1 2 3 4
- 2 1 4 3
- 4 3 2 1
- 3 1 2 4
7. 计算后缀(逆波兰)表达式 6 2 3 + * 的做法与结果是?
{{ select(7) }}
- 从左到右当普通算式算,得 11
- 遇数字就计算、遇符号入栈;结果 30
- 数字入栈,遇符号弹出栈顶两数运算再压回;结果 30
- 无法计算,缺少括号
8. 用优先队列(堆)解决"合并果子",应使用?
{{ select(8) }}
- 小根堆,每次取出最小的两个元素
- 大根堆,每次取出最大的两个元素
- 普通队列,先进先出
- 栈,后进先出
9. 关于 C++ 的 map,下列正确的是?
{{ select(9) }}
- map 的键可以重复
- 用 m[k] 访问不存在的键会自动创建它(值为 0),使 size() 增大
- map 遍历顺序是随机的
- 判断键是否存在应优先用 m[k]
10. 关于 vector 和 set,下列正确的是?
{{ select(10) }}
- vector 大小固定,不能动态增长
- set 允许存重复元素
- vector 的 push_back 每次都会重新分配内存
- set 会自动去重并按从小到大排序,判断元素是否存在用 count