开始整卷作答
按大题分页,翻页自动存草稿,做完统一交卷。
## 一、单项选择题(共 $15$ 题,每题 $2$ 分,共 $30$ 分)
第 1–15 题 · 共 15 题
## 二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ×。除特殊说明外,判断题 $2$ 分,选择题 $3$ 分,共计 $40$ 分)
第 16–16 题 · 共 1 题
## 二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ×。除特殊说明外,判断题 $2$ 分,选择题 $3$ 分,共计 $40$ 分)
1.
```cpp
#include<iostream>
using namespace std;
#define MAXN 20
int gu[MAXN][MAXN];
int luo(int n, int m) {
if(n <= 1 || m < 2)
return 1;
if(gu[n][m] != -1)
return gu[n][m];
int ans = 0;
for(int i = 0; i < m; i += 2)
ans += luo(n - 1, i);
gu[n][m] = ans;
return ans;
}
int main() {
int n, m;
cin >> n >> m;
for(int i = 0; i < MAXN; i++)
for(int j = 0; j < MAXN; j++)
gu[i][j] = -1;
cout << luo(n, m);
return 0;
}
```
第 17–21 题 · 共 5 题
## 二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ×。除特殊说明外,判断题 $2$ 分,选择题 $3$ 分,共计 $40$ 分)
第 22–22 题 · 共 1 题
2.
```cpp
#include<bits/stdc++.h>
using namespace std;
int n, m;
int f[101][101];
int F[101][101];
int main() {
scanf("%d%d", &n, &m); // n的值在1到100之间
memset(f, -1, sizeof(f));
for(int i = 1; i <= m; i++) {
int u, v, w; // w的值在0到10000之间
scanf("%d%d%d", &u, &v, &w);
f[u][v] = f[v][u] = w;
}
for(int k = 1; k <= n; k++)
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
if(f[i][k] != -1 && f[k][j] != -1)
if(f[i][j] == -1||f[i][j]>f[k][j]+f[i][k])
f[i][j] = f[i][k] + f[k][j];
int ans = 2147483647;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++) {
for(int x = 1; x <= n; x++)
for(int y = 1; y <= n; y++)
F[x][y] = f[x][y];
F[i][j] = F[j][i] = 0;
for(int x = 1; x <= n; x++)
for(int y = 1; y <= n; y++)
if(F[x][y]==-1||F[x][y]>F[x][i]+F[i][y])
F[x][y] = F[x][i] + F[i][y];
for(int x = 1; x <= n; x++)
for(int y = 1; y <= n; y++)
if(F[x][y]==-1||F[x][y]>F[x][j]+F[j][y])
F[x][y] = F[x][j] + F[j][y];
int res = 0;
for(int x = 1; x <= n; x++)
for(int y = 1; y < x; y++)
res += F[x][y];
ans = min(res, ans);
}
printf("%d\n", ans);
return 0;
}
```
第 23–27 题 · 共 5 题
## 二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ×。除特殊说明外,判断题 $2$ 分,选择题 $3$ 分,共计 $40$ 分)
第 28–28 题 · 共 1 题
3.
```cpp
#include<bits/stdc++.h>
using namespace std;
#define MOD 19260817
#define MAXN 1005
long long A[MAXN][MAXN] = {0}, sum[MAXN][MAXN] = {0};
int n, m, q;
int main() {
A[1][1] = A[1][0] = 1;
for(int i = 2; i <= 1000; i++) {
A[i][0] = 1;
for(int j = 1; j <= i; j++)
A[i][j] = (A[i - 1][j] + A[i - 1][j - 1]) % MOD;
}
for(int i = 1; i <= 1000; i++)
for(int j = 1; j <= 1000; j++)
sum[i][j] = (sum[i - 1][j] + sum[i][j - 1]
- sum[i - 1][j - 1] + A[i][j] + MOD) % MOD;
int q;
cin >> q;
while(q--) {
int n, m;
cin >> n >> m;
cout << sum[n][m] << endl;
}
return 0;
}
```
第 29–33 题 · 共 5 题
## 二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ×。除特殊说明外,判断题 $2$ 分,选择题 $3$ 分,共计 $40$ 分)
第 34–34 题 · 共 1 题
1. (封禁 xxs)现有 $n$ 个 xxs(编号为 $1$ 到 $n$),每个 xxs 都有一个关注者,第 $i$ 个 xxs 的关注者是 $a_i$。现在管理员要将其中的一些 xxs 的账号封禁,但需要注意的是如果封禁了第 $i$ 个人,那么为了不打草惊蛇,就不能封禁他的关注者 $a_i$。现在想知道最多可以封禁多少个 xxs。
输入第一行是一个不超过 $300000$ 的整数 $n$,第二行是 $n$ 个 $1$ 到 $n$ 的整数表示 $a_i$。
输出一行,一个整数表示答案。
```cpp
#include <cstdio>
using namespace std;
#define MAXN 300005
int n, ans = 0, a[MAXN], in[MAXN] = {0};
bool vis[MAXN] = {0};
void dfs(int cur, int w) {
if(vis[cur])
return;
vis[cur] = true;
if(w == 1) ans++;
①
if(②)
dfs(a[cur], ③);
}
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
in[a[i]]++;
}
for(int i = 1; i <= n; i++)
if(!in[i]) ④;
for(int i = 1; i <= n; i++)
if(⑤) dfs(i, 0);
printf("%d\n", ans);
return 0;
}
```
第 35–38 题 · 共 4 题
## 二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ×。除特殊说明外,判断题 $2$ 分,选择题 $3$ 分,共计 $40$ 分)
第 39–43 题 · 共 5 题
展开逐题清单(单独练某一道)
● 绿=已通过 ● 橙=做过没全对 ● 灰=没做过
## 一、单项选择题(共 $15$ 题,每题 $2$ 分,共 $30$ 分)
1.
CSP 2020 第一轮(初赛)模拟 第 1 题
2.
CSP 2020 第一轮(初赛)模拟 第 2 题
3.
CSP 2020 第一轮(初赛)模拟 第 3 题
4.
CSP 2020 第一轮(初赛)模拟 第 4 题
5.
CSP 2020 第一轮(初赛)模拟 第 5 题
6.
CSP 2020 第一轮(初赛)模拟 第 6 题
7.
CSP 2020 第一轮(初赛)模拟 第 7 题
8.
CSP 2020 第一轮(初赛)模拟 第 8 题
9.
CSP 2020 第一轮(初赛)模拟 第 9 题
10.
CSP 2020 第一轮(初赛)模拟 第 10 题
11.
CSP 2020 第一轮(初赛)模拟 第 11 题
12.
CSP 2020 第一轮(初赛)模拟 第 12 题
13.
CSP 2020 第一轮(初赛)模拟 第 13 题
14.
CSP 2020 第一轮(初赛)模拟 第 14 题
15.
CSP 2020 第一轮(初赛)模拟 第 15 题
## 二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ×。除特殊说明外,判断题 $2$ 分,选择题 $3$ 分,共计 $40$ 分)
16.
CSP 2020 第一轮(初赛)模拟 第 16 题
## 二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ×。除特殊说明外,判断题 $2$ 分,选择题 $3$ 分,共计 $40$ 分)
1.
```cpp
#include<iostream>
using namespace std;
#define MAXN 20
int gu[MAXN][MAXN];
int luo(int n, int m) {
if(n <= 1 || m < 2)
return 1;
if(gu[n][m] != -1)
return gu[n][m];
int ans = 0;
for(int i = 0; i < m; i += 2)
ans += luo(n - 1, i);
gu[n][m] = ans;
return ans;
}
int main() {
int n, m;
cin >> n >> m;
for(int i = 0; i < MAXN; i++)
for(int j = 0; j < MAXN; j++)
gu[i][j] = -1;
cout << luo(n, m);
return 0;
}
```
17.
CSP 2020 第一轮(初赛)模拟 第 17 题
18.
CSP 2020 第一轮(初赛)模拟 第 18 题
19.
CSP 2020 第一轮(初赛)模拟 第 19 题
20.
CSP 2020 第一轮(初赛)模拟 第 20 题
21.
CSP 2020 第一轮(初赛)模拟 第 21 题
## 二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ×。除特殊说明外,判断题 $2$ 分,选择题 $3$ 分,共计 $40$ 分)
22.
CSP 2020 第一轮(初赛)模拟 第 22 题
2.
```cpp
#include<bits/stdc++.h>
using namespace std;
int n, m;
int f[101][101];
int F[101][101];
int main() {
scanf("%d%d", &n, &m); // n的值在1到100之间
memset(f, -1, sizeof(f));
for(int i = 1; i <= m; i++) {
int u, v, w; // w的值在0到10000之间
scanf("%d%d%d", &u, &v, &w);
f[u][v] = f[v][u] = w;
}
for(int k = 1; k <= n; k++)
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
if(f[i][k] != -1 && f[k][j] != -1)
if(f[i][j] == -1||f[i][j]>f[k][j]+f[i][k])
f[i][j] = f[i][k] + f[k][j];
int ans = 2147483647;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++) {
for(int x = 1; x <= n; x++)
for(int y = 1; y <= n; y++)
F[x][y] = f[x][y];
F[i][j] = F[j][i] = 0;
for(int x = 1; x <= n; x++)
for(int y = 1; y <= n; y++)
if(F[x][y]==-1||F[x][y]>F[x][i]+F[i][y])
F[x][y] = F[x][i] + F[i][y];
for(int x = 1; x <= n; x++)
for(int y = 1; y <= n; y++)
if(F[x][y]==-1||F[x][y]>F[x][j]+F[j][y])
F[x][y] = F[x][j] + F[j][y];
int res = 0;
for(int x = 1; x <= n; x++)
for(int y = 1; y < x; y++)
res += F[x][y];
ans = min(res, ans);
}
printf("%d\n", ans);
return 0;
}
```
23.
CSP 2020 第一轮(初赛)模拟 第 23 题
24.
CSP 2020 第一轮(初赛)模拟 第 24 题
25.
CSP 2020 第一轮(初赛)模拟 第 25 题
26.
CSP 2020 第一轮(初赛)模拟 第 26 题
27.
CSP 2020 第一轮(初赛)模拟 第 27 题
## 二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ×。除特殊说明外,判断题 $2$ 分,选择题 $3$ 分,共计 $40$ 分)
28.
CSP 2020 第一轮(初赛)模拟 第 28 题
3.
```cpp
#include<bits/stdc++.h>
using namespace std;
#define MOD 19260817
#define MAXN 1005
long long A[MAXN][MAXN] = {0}, sum[MAXN][MAXN] = {0};
int n, m, q;
int main() {
A[1][1] = A[1][0] = 1;
for(int i = 2; i <= 1000; i++) {
A[i][0] = 1;
for(int j = 1; j <= i; j++)
A[i][j] = (A[i - 1][j] + A[i - 1][j - 1]) % MOD;
}
for(int i = 1; i <= 1000; i++)
for(int j = 1; j <= 1000; j++)
sum[i][j] = (sum[i - 1][j] + sum[i][j - 1]
- sum[i - 1][j - 1] + A[i][j] + MOD) % MOD;
int q;
cin >> q;
while(q--) {
int n, m;
cin >> n >> m;
cout << sum[n][m] << endl;
}
return 0;
}
```
29.
CSP 2020 第一轮(初赛)模拟 第 29 题
30.
CSP 2020 第一轮(初赛)模拟 第 30 题
31.
CSP 2020 第一轮(初赛)模拟 第 31 题
32.
CSP 2020 第一轮(初赛)模拟 第 32 题
33.
CSP 2020 第一轮(初赛)模拟 第 33 题
## 二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ×。除特殊说明外,判断题 $2$ 分,选择题 $3$ 分,共计 $40$ 分)
34.
CSP 2020 第一轮(初赛)模拟 第 34 题
1. (封禁 xxs)现有 $n$ 个 xxs(编号为 $1$ 到 $n$),每个 xxs 都有一个关注者,第 $i$ 个 xxs 的关注者是 $a_i$。现在管理员要将其中的一些 xxs 的账号封禁,但需要注意的是如果封禁了第 $i$ 个人,那么为了不打草惊蛇,就不能封禁他的关注者 $a_i$。现在想知道最多可以封禁多少个 xxs。
输入第一行是一个不超过 $300000$ 的整数 $n$,第二行是 $n$ 个 $1$ 到 $n$ 的整数表示 $a_i$。
输出一行,一个整数表示答案。
```cpp
#include <cstdio>
using namespace std;
#define MAXN 300005
int n, ans = 0, a[MAXN], in[MAXN] = {0};
bool vis[MAXN] = {0};
void dfs(int cur, int w) {
if(vis[cur])
return;
vis[cur] = true;
if(w == 1) ans++;
①
if(②)
dfs(a[cur], ③);
}
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
in[a[i]]++;
}
for(int i = 1; i <= n; i++)
if(!in[i]) ④;
for(int i = 1; i <= n; i++)
if(⑤) dfs(i, 0);
printf("%d\n", ans);
return 0;
}
```
35.
CSP 2020 第一轮(初赛)模拟 第 35 题
36.
CSP 2020 第一轮(初赛)模拟 第 36 题
37.
CSP 2020 第一轮(初赛)模拟 第 37 题
38.
CSP 2020 第一轮(初赛)模拟 第 38 题
## 二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ×。除特殊说明外,判断题 $2$ 分,选择题 $3$ 分,共计 $40$ 分)
39.
CSP 2020 第一轮(初赛)模拟 第 39 题
40.
CSP 2020 第一轮(初赛)模拟 第 40 题
41.
CSP 2020 第一轮(初赛)模拟 第 41 题
42.
CSP 2020 第一轮(初赛)模拟 第 42 题
43.
CSP 2020 第一轮(初赛)模拟 第 43 题