开始整卷作答
按大题分页,翻页自动存草稿,做完统一交卷。
## 一、单项选择题(共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 题