#3204. 26东方茂CSPJ暑期集训阶段测试客观题二

26东方茂CSPJ暑期集训阶段测试客观题二

1. 对一个长度为 n 的有序数组做二分查找,最坏情况下比较次数约为?

{{ select(1) }}

  • n
  • log₂n
  • n·log₂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