开始整卷作答
按大题分页,翻页自动存草稿,做完统一交卷。
## 一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项)
第 1–15 题 · 共 15 题
## 二、阅读程序(判断题正确填T,错误填F;判断题1分,选择题3分,共计37分)
### 第1篇
```cpp
#include<iostream>
int main()
{
int a, b;
std::cin >> a >> b;
int s = 0;
int c = 0;
while (a > 0 || b > 0)
{
int x = a % 10;
int y = b % 10;
a /= 10;
b /= 10;
if (x + y + c >= 10){
c = 1;
s++;
}
else {
c = 0;
}
}
std::cout << s << "\n";
}
```
第 16–20 题 · 共 5 题
### 第2篇
```cpp
#include<iostream>
int main()
{
int d;
std::cin >> d;
char s[1000];
int size = 0;
char c;
while (std::cin >> c){
while (size > 0 and d > 0){
char top = s[size - 1];
if (top < c){
d--;
size--;
}
else{
break;
}
}
s[size++] = c;
}
while (d > 0){
d--;
size--;
}
for (int i = 0; i < size; ++i) {
std::cout << s[i];
}
}
```
第 21–26 题 · 共 6 题
### 第3篇
```cpp
#include<iostream>
int choose[20];
int dfs(int m, int n)
{
if (m == n) {
bool flag = true;
for (int i = 0; i + 1 < n; ++i) {
if (choose[i] && choose[i+1]) {
flag = false;
}
}
if (flag) {
return 1;
}
else {
return 0;
}
}
else {
choose[m] = true;
int pick = dfs(m+1, n);
choose[m] = false;
int drop = dfs(m+1, n);
return pick + drop;
}
}
int fib(int n)
{
int f[21];
f[0] = 1;
f[1] = 2;
for (int i = 2; i <= n; ++i) {
f[i] = f[i-1] + f[i-2];
}
return f[n];
}
int main()
{
int n;
std::cin >> n;
std::cout << dfs(0, n) << " ";
std::cout << fib(n) << "\n";
}
```
第 27–34 题 · 共 8 题
## 三、完善程序(单选题,每小题3分,共计33分)
### 第1题
给定 $n$ 个数字 $a_1,a_2,\dots,a_n$,从 $1$ 到 $n$ 中挑出两个下标 $i$ 与 $j$ 并要求 $i<j$,然后将 $a_i$ 与 $a_j$ 组成一个有序的序对 $(a_i,a_j)$。
请统计,能从序列中挑选出多少种互不相等的数对?数对 $(x,y)$ 与 $(p,q)$ 称之为不相等,是指 $x\neq p$ 或者 $y\neq q$。
```cpp
#include<iostream>
const int maxn = 100005;
int a[maxn];
int c[maxn];
bool present[maxn];
int main()
{
int n;
std::cin >> n;
int num = 0;
long long pair = 0;
for (int i = 1; i <= n; ++i) {
std::cin >> a[i];
pair += ____①____;
pair -= c[____②____];
____③____ = num;
if (____④____){
present[a[i]] = true;
____⑤____;
}
}
std::cout << pair << "\n";
}
```
第 35–39 题 · 共 5 题
### 第2题
给定一个网格,该网格由 $n\times m$ 个方格组成,每个方格内有一个正整数,其中第 $i$ 行第 $j$ 列的整数为 $a_{i,j}$。我们可以使用任意多块 $1\times 2$ 的骨牌覆盖网格上的数字,每块骨牌不得重叠,也不能越过网格的边界。被骨牌覆盖的数字就消失了。请问应该如何摆放骨牌,使得没有消失的数字的异或之和达到最大。所谓异或,就是 C++ 的 `^` 操作。注意不覆盖任何骨牌也是一种选择。
```cpp
#include<iostream>
int a[20][20];
bool covered[20][20];
int n, m;
int solve(int x, int y, int sum)
{
if (y == m) {
return ____②____;
}
if (____③____) {
return sum;
}
int D = 0;
if ( covered[x][y] )
D = solve(x, y+1, sum);
else
D = ____④____;
int V = 0;
int H = 0;
if (!covered[x][y] && y+1 < m && !covered[x][y+1])
{
covered[x][y] = covered[x][y+1] = true;
V = ____⑤____;
covered[x][y] = covered[x][y+1] = false;
}
if (!covered[x][y] && x+1 < n)
{
covered[x][y] = covered[x+1][y] = true;
H = ____⑥____;
covered[x][y] = covered[x+1][y] = false;
}
return std::max(D, std::max(H, V));
}
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];
}
}
std::cout << ____①____ << "\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 题
## 二、阅读程序(判断题正确填T,错误填F;判断题1分,选择题3分,共计37分)
### 第1篇
```cpp
#include<iostream>
int main()
{
int a, b;
std::cin >> a >> b;
int s = 0;
int c = 0;
while (a > 0 || b > 0)
{
int x = a % 10;
int y = b % 10;
a /= 10;
b /= 10;
if (x + y + c >= 10){
c = 1;
s++;
}
else {
c = 0;
}
}
std::cout << s << "\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>
int main()
{
int d;
std::cin >> d;
char s[1000];
int size = 0;
char c;
while (std::cin >> c){
while (size > 0 and d > 0){
char top = s[size - 1];
if (top < c){
d--;
size--;
}
else{
break;
}
}
s[size++] = c;
}
while (d > 0){
d--;
size--;
}
for (int i = 0; i < size; ++i) {
std::cout << s[i];
}
}
```
21.
珅泽教育CSP-J第一轮模拟考第一套 第 21 题
22.
珅泽教育CSP-J第一轮模拟考第一套 第 22 题
23.
珅泽教育CSP-J第一轮模拟考第一套 第 23 题
24.
珅泽教育CSP-J第一轮模拟考第一套 第 24 题
25.
珅泽教育CSP-J第一轮模拟考第一套 第 25 题
26.
珅泽教育CSP-J第一轮模拟考第一套 第 26 题
### 第3篇
```cpp
#include<iostream>
int choose[20];
int dfs(int m, int n)
{
if (m == n) {
bool flag = true;
for (int i = 0; i + 1 < n; ++i) {
if (choose[i] && choose[i+1]) {
flag = false;
}
}
if (flag) {
return 1;
}
else {
return 0;
}
}
else {
choose[m] = true;
int pick = dfs(m+1, n);
choose[m] = false;
int drop = dfs(m+1, n);
return pick + drop;
}
}
int fib(int n)
{
int f[21];
f[0] = 1;
f[1] = 2;
for (int i = 2; i <= n; ++i) {
f[i] = f[i-1] + f[i-2];
}
return f[n];
}
int main()
{
int n;
std::cin >> n;
std::cout << dfs(0, n) << " ";
std::cout << fib(n) << "\n";
}
```
27.
珅泽教育CSP-J第一轮模拟考第一套 第 27 题
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 题
## 三、完善程序(单选题,每小题3分,共计33分)
### 第1题
给定 $n$ 个数字 $a_1,a_2,\dots,a_n$,从 $1$ 到 $n$ 中挑出两个下标 $i$ 与 $j$ 并要求 $i<j$,然后将 $a_i$ 与 $a_j$ 组成一个有序的序对 $(a_i,a_j)$。
请统计,能从序列中挑选出多少种互不相等的数对?数对 $(x,y)$ 与 $(p,q)$ 称之为不相等,是指 $x\neq p$ 或者 $y\neq q$。
```cpp
#include<iostream>
const int maxn = 100005;
int a[maxn];
int c[maxn];
bool present[maxn];
int main()
{
int n;
std::cin >> n;
int num = 0;
long long pair = 0;
for (int i = 1; i <= n; ++i) {
std::cin >> a[i];
pair += ____①____;
pair -= c[____②____];
____③____ = num;
if (____④____){
present[a[i]] = true;
____⑤____;
}
}
std::cout << pair << "\n";
}
```
35.
珅泽教育CSP-J第一轮模拟考第一套 第 35 题
36.
珅泽教育CSP-J第一轮模拟考第一套 第 36 题
37.
珅泽教育CSP-J第一轮模拟考第一套 第 37 题
38.
珅泽教育CSP-J第一轮模拟考第一套 第 38 题
39.
珅泽教育CSP-J第一轮模拟考第一套 第 39 题
### 第2题
给定一个网格,该网格由 $n\times m$ 个方格组成,每个方格内有一个正整数,其中第 $i$ 行第 $j$ 列的整数为 $a_{i,j}$。我们可以使用任意多块 $1\times 2$ 的骨牌覆盖网格上的数字,每块骨牌不得重叠,也不能越过网格的边界。被骨牌覆盖的数字就消失了。请问应该如何摆放骨牌,使得没有消失的数字的异或之和达到最大。所谓异或,就是 C++ 的 `^` 操作。注意不覆盖任何骨牌也是一种选择。
```cpp
#include<iostream>
int a[20][20];
bool covered[20][20];
int n, m;
int solve(int x, int y, int sum)
{
if (y == m) {
return ____②____;
}
if (____③____) {
return sum;
}
int D = 0;
if ( covered[x][y] )
D = solve(x, y+1, sum);
else
D = ____④____;
int V = 0;
int H = 0;
if (!covered[x][y] && y+1 < m && !covered[x][y+1])
{
covered[x][y] = covered[x][y+1] = true;
V = ____⑤____;
covered[x][y] = covered[x][y+1] = false;
}
if (!covered[x][y] && x+1 < n)
{
covered[x][y] = covered[x+1][y] = true;
H = ____⑥____;
covered[x][y] = covered[x+1][y] = false;
}
return std::max(D, std::max(H, V));
}
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];
}
}
std::cout << ____①____ << "\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 题