开始整卷作答
按大题分页,翻页自动存草稿,做完统一交卷。
## 一、单项选择题(共15题,每题2分,共计30分)
第 1–15 题 · 共 15 题
## 二、阅读程序(判断题1分,选择题3分,共计40分)
判断题正确填 `T`,错误填 `F`。
### 第1题
```cpp
#include<iostream>
int main()
{
int n, c;
std::cin >> n >> c;
long long sum = 0;
int pre = 1000000000;
for (int i = 0; i < n; ++i) {
int a;
std::cin >> a;
if (pre > a) {
pre = a;
}
sum += pre;
pre += c;
}
std::cout << sum << "\n";
}
```
第 16–19 题 · 共 4 题
### 第2题
```cpp
bool c[max_size][max_size] = {false};
void draw(int size, int x, int y)
{
if (size == 1)
{
c[x][y] = true;
}
else
{
int half = size / 2;
draw(half, x + half, y);
draw(half, x, y + half);
draw(half, x + half, y + half);
}
}
void print(int n)
{
int length = 1 << n;
draw(length, 0, 0);
for (int x = 0; x < length; ++x)
{
for (int y = 0; y < length; ++y)
{
if (c[x][y])
std::cout << '*';
else
std::cout << '.';
}
std::cout << "\n";
}
}
```
第 20–27 题 · 共 8 题
### 第三题
```cpp
bool valid = true;
std::vector<int> adj[max_node];
bool instack[max_node] = {false};
bool visited[max_node] = {false};
void dfs(int node)
{
instack[node] = true;
visited[node] = true;
for (auto after : adj[node]) {
if (!visited[after]) {
visited[after] = true;
dfs(after);
}
else if (instack[after]) {
valid = false;
}
}
instack[node] = false;
}
int main()
{
int n, m;
std::cin >> n >> m;
for (int i = 0; i < m; i++)
{
int x, y;
std::cin >> x >> y;
adj[x].push_back(y);
}
for (int i = 1; i <= n; i++)
{
if (!visited[i])
{
dfs(i);
}
}
if (valid) {
std::cout << "Valid\n";
} else {
std::cout << "Invalid\n";
}
}
```
第 28–35 题 · 共 8 题
## 三、完善程序(单选题,每小题3分,共计30分)
### 第1题
给定一个 $n\times n$ 的网格。第 $i+1$ 行、第 $j+1$ 列的格子($0\le i,j<n$)记作 $(i,j)$。格子 $(i,j)$ 的颜色由字符 $P[i\bmod n][j\bmod n]$ 决定,如果是 `B`,则 $(i,j)$ 是黑格,如果是 `W`,则是白格。
给定 $Q$ 个查询,请依次处理。每个查询给出 $4$ 个整数 $A,B,C,D$,求出以 $(A,B)$ 为左上角、$(C,D)$ 为右下角的矩形区域内包含的黑格数量。
```cpp
#include<iostream>
int n, q;
int s[1001][1001];
long long sum(int row, int col) {
long long a = 1LL * ____(1)____ ;
long long b = 1LL * (row/n) * s[n][col%n];
long long c = 1LL * (col/n) * s[row%n][n];
long long d = 1LL * ____(2)____ ;
return ____(3)____ ;
}
int main() {
std::cin >> n >> q;
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j) {
char c;
std::cin >> c;
____(4)____ ;
}
while (q-->0) {
int x1, x2, y1, y2;
std::cin >> x1 >> y1 >> x2 >> y2;
std::cout << ____(5)____ << "\n";
}
}
```
第 36–40 题 · 共 5 题
### 第2题
给定一个分数 $a/b$,若它是一个假分数,请将它化简成带分数形式输出。例如当 $a/b=91/30$,输出
```text
1
3--
30
```
当输入是一个真分数时,请将它化简后输出,且忽略整数部分,例如当 $a/b=30/100$ 时,输出
```text
3
--
10
```
当输入的分数可以变成整数时,忽略它分数部分。注意输出的所有分数都应该是既约的。
```cpp
#include<iostream>
int len(int n) {
int length = 0;
while (n > 0) {
n/=10;
length++;
}
return length;
}
void print(int n, char ch) {
while (n-->0) std::cout << ch;
}
int main()
{
int a, b;
char dummy;
std::cin >> a >> dummy >> b;
int p = a;
int q = b;
while (a != 0 and b != 0) {
if (a >= b) a %= b;
else b %= a;
}
int gcd;
if ( ____(1)____ ) gcd = b;
else gcd = a;
int i = p / q;
p %= q;
p /= gcd;
q /= gcd;
if ( ____(2)____ ) {
std::cout << i << "\n";
}
else {
int i_len = len(i);
int p_len = len(p);
int q_len = len(q);
____(3)____ ;
std::cout << ____(4)____ << "\n";
if (i != 0) std::cout << i ;
____(5)____ ;
std::cout << "\n";
____(6)____ ;
std::cout << ____(7)____ << "\n";
}
}
```
第 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
#include<iostream>
int main()
{
int n, c;
std::cin >> n >> c;
long long sum = 0;
int pre = 1000000000;
for (int i = 0; i < n; ++i) {
int a;
std::cin >> a;
if (pre > a) {
pre = a;
}
sum += pre;
pre += c;
}
std::cout << sum << "\n";
}
```
16.
珅泽教育CSP-J第一轮模拟考第五套 第 16 题
17.
珅泽教育CSP-J第一轮模拟考第五套 第 17 题
18.
珅泽教育CSP-J第一轮模拟考第五套 第 18 题
19.
珅泽教育CSP-J第一轮模拟考第五套 第 19 题
### 第2题
```cpp
bool c[max_size][max_size] = {false};
void draw(int size, int x, int y)
{
if (size == 1)
{
c[x][y] = true;
}
else
{
int half = size / 2;
draw(half, x + half, y);
draw(half, x, y + half);
draw(half, x + half, y + half);
}
}
void print(int n)
{
int length = 1 << n;
draw(length, 0, 0);
for (int x = 0; x < length; ++x)
{
for (int y = 0; y < length; ++y)
{
if (c[x][y])
std::cout << '*';
else
std::cout << '.';
}
std::cout << "\n";
}
}
```
20.
珅泽教育CSP-J第一轮模拟考第五套 第 20 题
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
bool valid = true;
std::vector<int> adj[max_node];
bool instack[max_node] = {false};
bool visited[max_node] = {false};
void dfs(int node)
{
instack[node] = true;
visited[node] = true;
for (auto after : adj[node]) {
if (!visited[after]) {
visited[after] = true;
dfs(after);
}
else if (instack[after]) {
valid = false;
}
}
instack[node] = false;
}
int main()
{
int n, m;
std::cin >> n >> m;
for (int i = 0; i < m; i++)
{
int x, y;
std::cin >> x >> y;
adj[x].push_back(y);
}
for (int i = 1; i <= n; i++)
{
if (!visited[i])
{
dfs(i);
}
}
if (valid) {
std::cout << "Valid\n";
} else {
std::cout << "Invalid\n";
}
}
```
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\times n$ 的网格。第 $i+1$ 行、第 $j+1$ 列的格子($0\le i,j<n$)记作 $(i,j)$。格子 $(i,j)$ 的颜色由字符 $P[i\bmod n][j\bmod n]$ 决定,如果是 `B`,则 $(i,j)$ 是黑格,如果是 `W`,则是白格。
给定 $Q$ 个查询,请依次处理。每个查询给出 $4$ 个整数 $A,B,C,D$,求出以 $(A,B)$ 为左上角、$(C,D)$ 为右下角的矩形区域内包含的黑格数量。
```cpp
#include<iostream>
int n, q;
int s[1001][1001];
long long sum(int row, int col) {
long long a = 1LL * ____(1)____ ;
long long b = 1LL * (row/n) * s[n][col%n];
long long c = 1LL * (col/n) * s[row%n][n];
long long d = 1LL * ____(2)____ ;
return ____(3)____ ;
}
int main() {
std::cin >> n >> q;
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j) {
char c;
std::cin >> c;
____(4)____ ;
}
while (q-->0) {
int x1, x2, y1, y2;
std::cin >> x1 >> y1 >> x2 >> y2;
std::cout << ____(5)____ << "\n";
}
}
```
36.
珅泽教育CSP-J第一轮模拟考第五套 第 36 题
37.
珅泽教育CSP-J第一轮模拟考第五套 第 37 题
38.
珅泽教育CSP-J第一轮模拟考第五套 第 38 题
39.
珅泽教育CSP-J第一轮模拟考第五套 第 39 题
40.
珅泽教育CSP-J第一轮模拟考第五套 第 40 题
### 第2题
给定一个分数 $a/b$,若它是一个假分数,请将它化简成带分数形式输出。例如当 $a/b=91/30$,输出
```text
1
3--
30
```
当输入是一个真分数时,请将它化简后输出,且忽略整数部分,例如当 $a/b=30/100$ 时,输出
```text
3
--
10
```
当输入的分数可以变成整数时,忽略它分数部分。注意输出的所有分数都应该是既约的。
```cpp
#include<iostream>
int len(int n) {
int length = 0;
while (n > 0) {
n/=10;
length++;
}
return length;
}
void print(int n, char ch) {
while (n-->0) std::cout << ch;
}
int main()
{
int a, b;
char dummy;
std::cin >> a >> dummy >> b;
int p = a;
int q = b;
while (a != 0 and b != 0) {
if (a >= b) a %= b;
else b %= a;
}
int gcd;
if ( ____(1)____ ) gcd = b;
else gcd = a;
int i = p / q;
p %= q;
p /= gcd;
q /= gcd;
if ( ____(2)____ ) {
std::cout << i << "\n";
}
else {
int i_len = len(i);
int p_len = len(p);
int q_len = len(q);
____(3)____ ;
std::cout << ____(4)____ << "\n";
if (i != 0) std::cout << i ;
____(5)____ ;
std::cout << "\n";
____(6)____ ;
std::cout << ____(7)____ << "\n";
}
}
```
41.
珅泽教育CSP-J第一轮模拟考第五套 第 41 题
42.
珅泽教育CSP-J第一轮模拟考第五套 第 42 题
43.
珅泽教育CSP-J第一轮模拟考第五套 第 43 题
44.
珅泽教育CSP-J第一轮模拟考第五套 第 44 题
45.
珅泽教育CSP-J第一轮模拟考第五套 第 45 题