33 · 珅泽教育CSP-J第一轮模拟考第六套

历年真题 · 共 45 题 · 建议用时 60 分钟
开始整卷作答 按大题分页,翻页自动存草稿,做完统一交卷。
## 一、单项选择题(共15题,每题2分,共计30分) 第 1–15 题 · 共 15 题
## 二、阅读程序(判断题1分,选择题3分,共计40分) 判断题正确填 `T`,错误填 `F`。 ### 第1题 ```cpp int solve1(int n) { int s = 0; for (int i = 1; i <= n; ++i) { int f = 1; for (int j = i; j >= 1; --j) { f = f * i; } s = s + f; } return s; } int solve2(int n) { int s = 0; for (int i = n; i >= 1; --i) { s = s + 1; s = s * i; } return s; } ``` 保证 `solve1` 与 `solve2` 的参数 `n` 是正整数。 #### 判断题 第 16–17 题 · 共 2 题
#### 选择题 第 18–20 题 · 共 3 题
### 第2题 ```cpp bool move(int b[], int n) { for (int i = 0; i < n; ++i) { if (b[i] == 1) { b[i] = 0; } else { b[i] = 1; return true; } } return false; } void loop(int n) { int b[n]; for (int i = 0; i < n; ++i) b[i] = 0; do { for (int i = 0; i < n; ++i) std::cout << b[i]; std::cout << "\n"; } while (move(b, n)); } ``` 保证 `loop` 的参数 `n` 是一个正整数。 #### 判断题 第 21–24 题 · 共 4 题
#### 选择题 第 25–27 题 · 共 3 题
### 第三题 ```cpp 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; } }; ``` #### 判断题 第 28–31 题 · 共 4 题
#### 选择题 第 32–35 题 · 共 4 题
## 三、完善程序(单选题,每小题3分,共计30分) ### 第1题 给定含有 $n$ 个顶点的有向完全图(顶点编号为 $0$ 到 $n-1$)。顶点 $x$ 到 $y$ 的边的权重为 `g[x][y]`。 请找出一条不重复经过任何点的路径,从顶点 $0$ 出发到顶点 $n-1$ 结束,路径上所有边的权重的异或值尽可能大。 ```cpp int n, m; long long g[MAXN][MAXN]; bool visited[MAXN] = {false}; int dfs(int node, int path) { if (____(1)____) { return ____(2)____; } int best = 0; visited[node] = true; for (int next = 0 ; next < ____(3)____; ++next) { if (____(4)____) { best = std::max(best, ____(5)____); } } visited[____(6)____] = ____(7)____; } int solve() { return ____(8)____; } ``` 第 36–40 题 · 共 5 题
### 第2题 $n$ 个岛屿由 $n$ 座桥连成环。岛的编号为 $0$ 到 $n-1$,第 $i$ 座桥连第 $i$ 号岛与第 $(i+1)\bmod n$ 号岛。 某旅行团从第 $x_1$ 号岛出发,依次访问的岛编号为 $x_2,\ldots,x_m$。 现在需要选择拆掉一座桥,请问拆掉哪一座桥可以使得旅行团的过桥次数达到最小。 ```cpp int solve(int n, int m, int x[]) { int diff[n]; for (int i = 0; i < n; ++i) diff[i] = 0; int common = 0; for (int i = 1; i < m; ++i) { int prev = x[i - 1]; int next = x[i]; int begin, end; if (prev < next) { begin = prev; end = next; } else { begin = next; end = prev; } common += ____(1)____; int inc = ____(2)____; diff[____(3)____] += inc; diff[____(4)____] -= inc; prev = next; } int best = n * m; int sum = 0; for (int i = 0; i < n; ++i) { ____(5)____; if (best > sum) best = sum; } return ____(6)____; } ``` 第 41–45 题 · 共 5 题
展开逐题清单(单独练某一道)
● 绿=已通过 ● 橙=做过没全对 ● 灰=没做过
## 一、单项选择题(共15题,每题2分,共计30分)
1. 珅泽教育CSP-J第一轮模拟考第六套 第 1 题 2. 珅泽教育CSP-J第一轮模拟考第六套 第 2 题 3. 珅泽教育CSP-J第一轮模拟考第六套 第 3 题 4. 珅泽教育CSP-J第一轮模拟考第六套 第 4 题 5. 珅泽教育CSP-J第一轮模拟考第六套 第 5 题 6. 珅泽教育CSP-J第一轮模拟考第六套 第 6 题 7. 珅泽教育CSP-J第一轮模拟考第六套 第 7 题 8. 珅泽教育CSP-J第一轮模拟考第六套 第 8 题 9. 珅泽教育CSP-J第一轮模拟考第六套 第 9 题 10. 珅泽教育CSP-J第一轮模拟考第六套 第 10 题 11. 珅泽教育CSP-J第一轮模拟考第六套 第 11 题 12. 珅泽教育CSP-J第一轮模拟考第六套 第 12 题 13. 珅泽教育CSP-J第一轮模拟考第六套 第 13 题 14. 珅泽教育CSP-J第一轮模拟考第六套 第 14 题 15. 珅泽教育CSP-J第一轮模拟考第六套 第 15 题
## 二、阅读程序(判断题1分,选择题3分,共计40分) 判断题正确填 `T`,错误填 `F`。 ### 第1题 ```cpp int solve1(int n) { int s = 0; for (int i = 1; i <= n; ++i) { int f = 1; for (int j = i; j >= 1; --j) { f = f * i; } s = s + f; } return s; } int solve2(int n) { int s = 0; for (int i = n; i >= 1; --i) { s = s + 1; s = s * i; } return s; } ``` 保证 `solve1` 与 `solve2` 的参数 `n` 是正整数。 #### 判断题
16. 珅泽教育CSP-J第一轮模拟考第六套 第 16 题 17. 珅泽教育CSP-J第一轮模拟考第六套 第 17 题
#### 选择题
18. 珅泽教育CSP-J第一轮模拟考第六套 第 18 题 19. 珅泽教育CSP-J第一轮模拟考第六套 第 19 题 20. 珅泽教育CSP-J第一轮模拟考第六套 第 20 题
### 第2题 ```cpp bool move(int b[], int n) { for (int i = 0; i < n; ++i) { if (b[i] == 1) { b[i] = 0; } else { b[i] = 1; return true; } } return false; } void loop(int n) { int b[n]; for (int i = 0; i < n; ++i) b[i] = 0; do { for (int i = 0; i < n; ++i) std::cout << b[i]; std::cout << "\n"; } while (move(b, n)); } ``` 保证 `loop` 的参数 `n` 是一个正整数。 #### 判断题
21. 珅泽教育CSP-J第一轮模拟考第六套 第 21 题 22. 珅泽教育CSP-J第一轮模拟考第六套 第 22 题 23. 珅泽教育CSP-J第一轮模拟考第六套 第 23 题 24. 珅泽教育CSP-J第一轮模拟考第六套 第 24 题
#### 选择题
25. 珅泽教育CSP-J第一轮模拟考第六套 第 25 题 26. 珅泽教育CSP-J第一轮模拟考第六套 第 26 题 27. 珅泽教育CSP-J第一轮模拟考第六套 第 27 题
### 第三题 ```cpp 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; } }; ``` #### 判断题
28. 珅泽教育CSP-J第一轮模拟考第六套 第 28 题 29. 珅泽教育CSP-J第一轮模拟考第六套 第 29 题 30. 珅泽教育CSP-J第一轮模拟考第六套 第 30 题 31. 珅泽教育CSP-J第一轮模拟考第六套 第 31 题
#### 选择题
32. 珅泽教育CSP-J第一轮模拟考第六套 第 32 题 33. 珅泽教育CSP-J第一轮模拟考第六套 第 33 题 34. 珅泽教育CSP-J第一轮模拟考第六套 第 34 题 35. 珅泽教育CSP-J第一轮模拟考第六套 第 35 题
## 三、完善程序(单选题,每小题3分,共计30分) ### 第1题 给定含有 $n$ 个顶点的有向完全图(顶点编号为 $0$ 到 $n-1$)。顶点 $x$ 到 $y$ 的边的权重为 `g[x][y]`。 请找出一条不重复经过任何点的路径,从顶点 $0$ 出发到顶点 $n-1$ 结束,路径上所有边的权重的异或值尽可能大。 ```cpp int n, m; long long g[MAXN][MAXN]; bool visited[MAXN] = {false}; int dfs(int node, int path) { if (____(1)____) { return ____(2)____; } int best = 0; visited[node] = true; for (int next = 0 ; next < ____(3)____; ++next) { if (____(4)____) { best = std::max(best, ____(5)____); } } visited[____(6)____] = ____(7)____; } int solve() { return ____(8)____; } ```
36. 珅泽教育CSP-J第一轮模拟考第六套 第 36 题 37. 珅泽教育CSP-J第一轮模拟考第六套 第 37 题 38. 珅泽教育CSP-J第一轮模拟考第六套 第 38 题 39. 珅泽教育CSP-J第一轮模拟考第六套 第 39 题 40. 珅泽教育CSP-J第一轮模拟考第六套 第 40 题
### 第2题 $n$ 个岛屿由 $n$ 座桥连成环。岛的编号为 $0$ 到 $n-1$,第 $i$ 座桥连第 $i$ 号岛与第 $(i+1)\bmod n$ 号岛。 某旅行团从第 $x_1$ 号岛出发,依次访问的岛编号为 $x_2,\ldots,x_m$。 现在需要选择拆掉一座桥,请问拆掉哪一座桥可以使得旅行团的过桥次数达到最小。 ```cpp int solve(int n, int m, int x[]) { int diff[n]; for (int i = 0; i < n; ++i) diff[i] = 0; int common = 0; for (int i = 1; i < m; ++i) { int prev = x[i - 1]; int next = x[i]; int begin, end; if (prev < next) { begin = prev; end = next; } else { begin = next; end = prev; } common += ____(1)____; int inc = ____(2)____; diff[____(3)____] += inc; diff[____(4)____] -= inc; prev = next; } int best = n * m; int sum = 0; for (int i = 0; i < n; ++i) { ____(5)____; if (best > sum) best = sum; } return ____(6)____; } ```
41. 珅泽教育CSP-J第一轮模拟考第六套 第 41 题 42. 珅泽教育CSP-J第一轮模拟考第六套 第 42 题 43. 珅泽教育CSP-J第一轮模拟考第六套 第 43 题 44. 珅泽教育CSP-J第一轮模拟考第六套 第 44 题 45. 珅泽教育CSP-J第一轮模拟考第六套 第 45 题