开始整卷作答
按大题分页,翻页自动存草稿,做完统一交卷。
## 一、单项选择题(共15题,每题2分,共计30分)
第 1–15 题 · 共 15 题
## 二、阅读程序(判断题1分,选择题3分,共计40分)
判断题正确填 `T`,错误填 `F`。
### 第1题
```cpp
#include<iostream>
int main()
{
const int maxn = 100000;
int n;
std::cin >> n;
int a[maxn];
int b[maxn];
for (int i = 0; i < n; ++i)
{
std::cin >> a[i];
b[a[i]] = i;
}
for (int i = 0; i < n; ++i)
{
std::cout << b[i] << "\n";
}
}
```
第 16–20 题 · 共 5 题
### 第2题
```cpp
#include<iostream>
#include<algorithm>
int main()
{
int n, d;
std::cin >> n >> d;
int x[n];
for (int i = 0; i < n; ++i) {
std::cin >> x[i];
}
std::sort(x, x + n);
long long pair = 0;
int j = 1;
for (int i = 0; i < n; ++i) {
while (j < n and x[j] - x[i] <= d) {
j++;
}
pair += j - i - 1;
}
std::cout << pair << "\n";
}
```
第 21–27 题 · 共 7 题
### 第三题
```cpp
#include<iostream>
int mem[2000000] = {0};
int q[2000000] = {0};
int main()
{
int r, b;
std::cin >> r >> b;
int step = 0;
while (r != 0) {
step++;
if (mem[r] > 0) {
break;
}
else {
mem[r] = step;
}
q[step] = r * 2 / b;
r = r * 2 % b;
}
std::cout << "0.";
if (r == 0) {
for (int i = 1; i <= step; ++i) std::cout << q[i];
}
else {
int begin = mem[r];
for (int i = 1; i < begin; ++i)
std::cout << q[i];
std::cout << "(";
for (int i = begin; i < step; ++i)
std::cout << q[i];
std::cout << ")";
}
}
```
第 28–35 题 · 共 8 题
## 三、完善程序(单选题,每小题3分,共计30分)
### 第1题
给定一个长度为 $n$、由正整数组成的序列 $a_1,a_2,\ldots,a_n$,请你求出所有子段中第 $k$ 小的子段和。
```cpp
#include<iostream>
int n,k,a[100005];
bool check(long long mid) {
long long s = 0;
for(int l = 1,r = 1;r <= n; r++) {
while(l <= r && ____(1)____) l++;
s+=____(2)____;
}
return ____(3)____;
}
int main(){
std::cin>>n>>k;
for(int i=1;i<=n;i++) {
std::cin >>a[i];
a[i]+=a[i-1];
}
long long lbound = 0,rbound = 5000000000,mid;
while(lbound <= rbound) {
mid = (lbound + rbound) >> 1;
if(check(mid)) ____(4)____rbound = mid - 1;
else ____(5)____lbound = mid + 1;
}
std::cout << lbound;
return 0;
}
```
第 36–39 题 · 共 4 题
### 第2题
给定 $n\times m$ 个方格构成的图,每个格子都有一种地形:有一些格子是墙,以符号 `#` 表示,墙不可通行;有一些格子是空地,以符号 `.` 表示,空地可以通行。请统计从左上角的方格出发,有多少种不同的路线可以以最短距离走到右下角。在行走过程中,不能进入地形为墙的方格,保证起点与终点方格地形不是墙。且行走时,只能移动到水平或垂直方向相邻的方格。由于方案数可能很大,输出模 $1000000007$ 的余数。
```cpp
#include<iostream>
char a[1000][1000];
int d[1000][1000];
int w[1000][1000];
int n, m;
int qx[1000*1000];
int qy[1000*1000];
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};
void bfs(int x, int y) {
qx[0] = x;
qy[0] = y;
d[x][y] = 1;
w[x][y] = 1;
int head = 0;
int tail = 1;
while (head < tail) {
int x = qx[head];
int y = qy[head];
head++;
for (int k = 0; k < 4; ++k) {
int nx = x + dx[k];
int ny = y + dy[k];
if (0 <= nx and nx < n and 0 <= ny and ny < m and a[nx][ny] == '.') {
if ( ____(1)____ ) {
d[nx][ny] = ____(2)____;
w[nx][ny] = ____(3)____;
qx[tail] = nx;
qy[tail] = ny;
tail++;
}
else if (____(4)____) {
w[nx][ny] = ____(5)____;
w[nx][ny] %= 1000000007;
}
}
}
}
}
int main()
{
std::cin >> n >> m;
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j) {
std::cin >> a[i][j];
}
bfs(0, 0);
std::cout << ____(6)____ << "\n";
}
```
第 40–45 题 · 共 6 题
展开逐题清单(单独练某一道)
● 绿=已通过 ● 橙=做过没全对 ● 灰=没做过
## 一、单项选择题(共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
#include<iostream>
int main()
{
const int maxn = 100000;
int n;
std::cin >> n;
int a[maxn];
int b[maxn];
for (int i = 0; i < n; ++i)
{
std::cin >> a[i];
b[a[i]] = i;
}
for (int i = 0; i < n; ++i)
{
std::cout << b[i] << "\n";
}
}
```
16.
珅泽教育CSP-J第一轮模拟考第三套 第 16 题
17.
珅泽教育CSP-J第一轮模拟考第三套 第 17 题
18.
珅泽教育CSP-J第一轮模拟考第三套 第 18 题
19.
珅泽教育CSP-J第一轮模拟考第三套 第 19 题
20.
珅泽教育CSP-J第一轮模拟考第三套 第 20 题
### 第2题
```cpp
#include<iostream>
#include<algorithm>
int main()
{
int n, d;
std::cin >> n >> d;
int x[n];
for (int i = 0; i < n; ++i) {
std::cin >> x[i];
}
std::sort(x, x + n);
long long pair = 0;
int j = 1;
for (int i = 0; i < n; ++i) {
while (j < n and x[j] - x[i] <= d) {
j++;
}
pair += j - i - 1;
}
std::cout << pair << "\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
#include<iostream>
int mem[2000000] = {0};
int q[2000000] = {0};
int main()
{
int r, b;
std::cin >> r >> b;
int step = 0;
while (r != 0) {
step++;
if (mem[r] > 0) {
break;
}
else {
mem[r] = step;
}
q[step] = r * 2 / b;
r = r * 2 % b;
}
std::cout << "0.";
if (r == 0) {
for (int i = 1; i <= step; ++i) std::cout << q[i];
}
else {
int begin = mem[r];
for (int i = 1; i < begin; ++i)
std::cout << q[i];
std::cout << "(";
for (int i = begin; i < step; ++i)
std::cout << q[i];
std::cout << ")";
}
}
```
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$、由正整数组成的序列 $a_1,a_2,\ldots,a_n$,请你求出所有子段中第 $k$ 小的子段和。
```cpp
#include<iostream>
int n,k,a[100005];
bool check(long long mid) {
long long s = 0;
for(int l = 1,r = 1;r <= n; r++) {
while(l <= r && ____(1)____) l++;
s+=____(2)____;
}
return ____(3)____;
}
int main(){
std::cin>>n>>k;
for(int i=1;i<=n;i++) {
std::cin >>a[i];
a[i]+=a[i-1];
}
long long lbound = 0,rbound = 5000000000,mid;
while(lbound <= rbound) {
mid = (lbound + rbound) >> 1;
if(check(mid)) ____(4)____rbound = mid - 1;
else ____(5)____lbound = mid + 1;
}
std::cout << lbound;
return 0;
}
```
36.
珅泽教育CSP-J第一轮模拟考第三套 第 36 题
37.
珅泽教育CSP-J第一轮模拟考第三套 第 37 题
38.
珅泽教育CSP-J第一轮模拟考第三套 第 38 题
39.
珅泽教育CSP-J第一轮模拟考第三套 第 39 题
### 第2题
给定 $n\times m$ 个方格构成的图,每个格子都有一种地形:有一些格子是墙,以符号 `#` 表示,墙不可通行;有一些格子是空地,以符号 `.` 表示,空地可以通行。请统计从左上角的方格出发,有多少种不同的路线可以以最短距离走到右下角。在行走过程中,不能进入地形为墙的方格,保证起点与终点方格地形不是墙。且行走时,只能移动到水平或垂直方向相邻的方格。由于方案数可能很大,输出模 $1000000007$ 的余数。
```cpp
#include<iostream>
char a[1000][1000];
int d[1000][1000];
int w[1000][1000];
int n, m;
int qx[1000*1000];
int qy[1000*1000];
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};
void bfs(int x, int y) {
qx[0] = x;
qy[0] = y;
d[x][y] = 1;
w[x][y] = 1;
int head = 0;
int tail = 1;
while (head < tail) {
int x = qx[head];
int y = qy[head];
head++;
for (int k = 0; k < 4; ++k) {
int nx = x + dx[k];
int ny = y + dy[k];
if (0 <= nx and nx < n and 0 <= ny and ny < m and a[nx][ny] == '.') {
if ( ____(1)____ ) {
d[nx][ny] = ____(2)____;
w[nx][ny] = ____(3)____;
qx[tail] = nx;
qy[tail] = ny;
tail++;
}
else if (____(4)____) {
w[nx][ny] = ____(5)____;
w[nx][ny] %= 1000000007;
}
}
}
}
}
int main()
{
std::cin >> n >> m;
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j) {
std::cin >> a[i][j];
}
bfs(0, 0);
std::cout << ____(6)____ << "\n";
}
```
40.
珅泽教育CSP-J第一轮模拟考第三套 第 40 题
41.
珅泽教育CSP-J第一轮模拟考第三套 第 41 题
42.
珅泽教育CSP-J第一轮模拟考第三套 第 42 题
43.
珅泽教育CSP-J第一轮模拟考第三套 第 43 题
44.
珅泽教育CSP-J第一轮模拟考第三套 第 44 题
45.
珅泽教育CSP-J第一轮模拟考第三套 第 45 题