提高组 CSP-S 2026 初赛模拟卷8

    客观题

提高组 CSP-S 2026 初赛模拟卷8

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

提高组 CSP-S 2026 初赛模拟卷8

  1. 十进制的160.5相当于十六进制的( )。 {{ select(1) }}
  • A0.8
  • F.5
  • 80.25
  • 无限小数
  1. 在具有2n个节点的完全二叉树中,叶节点的个数为( )。 {{ select(2) }}
  • n-1
  • n
  • n+1
  • 不能确定
  1. 6个棋子围成一圈,每个棋子可染黑色或白色,通过旋转可重合的算一种方案,则一共有( )种着色方案。 {{ select(3) }}
  • 32
  • 20
  • 16
  • 14
  1. 假设x和y是两个独立的随机实数变量,且它们都是从[0,1]的均匀分布里随机生成的,则min(x,y)的期望值是( )。 {{ select(4) }}
  • 1/4
  • 1/3
  • 1/2
  • 不是有理数
  1. 设某算法的计算时间表示为递推关系式T(n)=T(n-1)+3n(n为正整数),且T(0)=1,则该算法的时间复杂度为( )。 {{ select(5) }}
  • O(n)
  • O(n²)
  • O(n log n)
  • O(n³)
  1. 在单链表指针p指向的节点后,插入指针s指向的节点,正确的操作是( )。 {{ select(6) }}
  • p->next = s; s->next = p->next;
  • s->next = p->next; p->next = s;
  • p->next = s; p->next = s->next;
  • p->next = s->next; p->next = s;
  1. 前缀表达式 + 3 * 2 + 5 1 2 的值是( )。 {{ select(7) }}
  • 23
  • 37
  • 33
  • 35
  1. 若在某进制下7×7=41成立,那么在该进制下12×12=( )。 {{ select(8) }}
  • 144
  • 100
  • E4
  • 81
  1. 寄存器是( )的重要组成部分。 {{ select(9) }}
  • 硬盘
  • 高速缓存
  • 内存
  • 中央处理器(CPU)
  1. 无向图G=(V,E),其中V={A₀, A₁, A₂, A₃},E={(A₀,A₁), (A₀,A₂), (A₀,A₃), (A₁,A₃)}。以A₀为起点进行深度优先搜索,遍历顺序不可能是( )。 {{ select(10) }}
  • A₀, A₁, A₂, A₃
  • A₀, A₁, A₃, A₂
  • A₀, A₂, A₁, A₃
  • A₀, A₃, A₁, A₂
  1. 双向链表的节点包含两个指针域,llink和rlink,分别指向其前驱节点和后继节点。设p指向链表中的一个节点,q指向一待插入节点。现要求在p前插入q,则正确的插入操作为( )。 {{ select(11) }}
  • p->llink = q; q->rlink = p; p->llink->rlink = q; q->llink = p->llink;
  • q->llink = p->llink; q->rlink = p; p->llink = q; p->llink->rlink = q;
  • q->rlink = p; p->rlink = q; p->llink->rlink = q; q->rlink = p;
  • p->llink->rlink = q; q->rlink = p; q->llink = p->llink; p->llink = q;
  1. 有向图G=(V,E),其中V={A₀, A₁, A₂, A₃, A₄},从顶点A₀出发进行广度优先搜索(BFS),一种可行顺序是A₀, A₄, A₂, A₃, A₁。以(x,y)表示x指向y的有向边,则边集E可能是( )。 {{ select(12) }}
  • {(A₀,A₁),(A₀,A₂),(A₀,A₃),(A₀,A₄),(A₂,A₁),(A₂,A₃)}
  • {(A₀,A₁),(A₀,A₃),(A₁,A₂),(A₂,A₃),(A₃,A₄)}
  • {(A₀,A₁),(A₀,A₂),(A₀,A₄),(A₂,A₁),(A₂,A₃),(A₃,A₄)}
  • {(A₀,A₁),(A₀,A₂),(A₀,A₃),(A₂,A₁),(A₂,A₃),(A₃,A₄)}
  1. 一棵二叉树的前序遍历序列是ABCDEFG,后序遍历序列是CBFEGDA,则根节点的左子树的节点个数可能是( )。 {{ select(13) }}
  • 0
  • 2
  • 4
  • 6
  1. 由3个a、5个b和2个c构成的所有字符串中,包含子串abc的共有( )个。 {{ select(14) }}
  • 840
  • 820
  • 800
  • 780
  1. 拓扑排序是指将有向无环图G中的所有顶点排成一个线性序列……对有向无环图G=(V,E),V={1,2,3,4,5,6,7,8,9},E={(1,2),(1,5),(2,3),(3,4),(3,7),(4,6),(7,6),(8,9)},可能的拓扑序列的个数为( )。 {{ select(15) }}
  • 336
  • 432
  • 96
  • 343

(1)

#include <iostream>
using namespace std;
int n;
int main(){
    cin >> n;          // 保证输入为正整数
    int ans = n;
    for(int i = 2; i <= n; i++){
        if(n % i == 0){
            while(n % i == 0) n /= i;
            ans = ans / i * (i - 1);
        }
    }
    cout << ans << endl;
    return 0;
}
  1. 该算法的时间复杂度为 O(n)。( ) {{ select(16) }}
  • True
  • False
  1. 输出的数一定不会比n大。( ) {{ select(17) }}
  • True
  • False
  1. 如果n>2,则输出一定是偶数。( ) {{ select(18) }}
  • True
  • False
  1. 如果n是素数,则输出就是n。( ) {{ select(19) }}
  • True
  • False
  1. 输入1001时,输出为( )。 {{ select(20) }}
  • 1024
  • 1000
  • 720
  • 512
  1. 依次输入1~20,则输出的最大值为( )。 {{ select(21) }}
  • 10
  • 12
  • 15
  • 18

(2)

#include <iostream>
#include <string>
using namespace std;
int n, x[100];
string s[100];
int main(){
    while(cin >> s[++n]);
    n--;
    for(int i = 1; i <= n; i++)
        for(int j = 0; j < s[i].size(); j++)
            x[i] = x[i] * x[i] + s[i][j];
    int ans = n;
    for(int i = n; i >= 1; i--){
        bool b = 0;
        for(int j = 1; j < i && !b; j++)
            if(x[i] == x[j]) b = true;
        ans -= b;
    }
    cout << ans << endl;
    return 0;
}
  1. 输入的时候如果有多行,则只会读入第一行。( ) {{ select(22) }}
  • True
  • False
  1. 第二组for循环(int ans = n;之后开始的)的时间复杂度可以优化到O(nlogn)。( ) {{ select(23) }}
  • True
  • False
  1. 如果只输入小写字母,且所有s[i].size()<=10,则x[i]最终的值都是正数。( ) {{ select(24) }}
  • True
  • False
  1. 输入 in dzds left brain there is nothing left while in his right there is nothing right,并将第12行改为x[i]=x[i]*x[i]*x[i]+s[i][j];,输出不会有变化。( ) {{ select(25) }}
  • True
  • False
  1. 输入 in theory theory and practice are the same in practice they are not,输出为( )。 {{ select(26) }}
  • 13
  • 11
  • 9
  • 7
  1. 以下描述中错误的是( )。 {{ select(27) }}
  • 输出的时候,ans的值一定不大于n的值
  • 无须定义字符串数组也能实现同样的功能
  • 输入长度为10的10个由小写字母组成的单词,则输出概率最大的值是10
  • 设只输入小写字母且s[i].size()≤10,如果s[j]≠s[k],则一定有x[j]≠x[k](1≤j<k≤n)

(3)

#include <bits/stdc++.h>
using namespace std;
int a[1010][12], n, m, pw[12] = {1};
int main(){
    cin >> n >> m;          // 保证 0< n,m≤1000
    for(int h = 1, p = 2; p <= n; p *= 2, h++) pw[h] = 2 * pw[h-1];
    for(int i = 1; i <= n; i++) cin >> a[i][0];
    for(int h = 1; pw[h] <= n; h++)
        for(int i = 1; i <= n - pw[h] + 1; i++)
            a[i][h] = max(a[i][h-1], a[i + pw[h-1]][h-1]);
    for(int i = 1, x, y, h; i <= m; i++){
        cin >> x >> y;      // 保证 1≤x≤y≤n
        for(h = 0; pw[h] * 2 <= y - x + 1; ) h++;
        cout << max(a[x][h], a[y - pw[h] + 1][h]) << " ";
    }
    return 0;
}
  1. 输入 n=100 时,数组 pw 中非零元素共有7个。( ) {{ select(28) }}
  • True
  • False
  1. 对一组 x=y 的输入,对应的输出就是x。( ) {{ select(29) }}
  • True
  • False
  1. 固定 i,则 a[i][h] 的值随 h 单调不降,不考虑没被赋值过的位置。( ) {{ select(30) }}
  • True
  • False
  1. 将倒数第5行中for循环的循环条件改为 pw[h+1]<=y-x+1,结果不会有变化。( ) {{ select(31) }}
  • True
  • False
  1. 此程序的时间复杂度为( )。 {{ select(32) }}
  • O(n(n+m))
  • O((n+m)logn)
  • O(n²+m)
  • O(n logn + m)
  1. 输入如下,输出为( )。
5 3
1 5 2 4 3
1 5
2 4
3 3

{{ select(33) }}

  • 555
  • 543
  • 552
  • 542

(1)

二叉查找树具有如下性质:每个节点的值都大于其左子树上所有节点的值,小于其右子树上所有节点的值。试判断一棵树是否为二叉查找树。

输入格式:第一行一个整数n,表示节点数,编号1..n,1为根。接下来第i行有三个数value, left_child, right_child,分别表示节点i的值、左子节点编号、右子节点编号(0表示不存在)。

输出要求:输出1表示是二叉查找树,0表示不是。

#include <iostream>
using namespace std;
const int INF = 1000000;
struct node{ int l, r, v; } a[100];
int n;
int check(int x, int lower_bound, int upper_bound){
    if(x == 0) return 1;
    return ① && ② && check(③) && check(④);
}
int main(){
    cin >> n;
    for(int i = 1; i <= n; i++)
        cin >> a[i].v >> a[i].l >> a[i].r;
    cout << check(⑤, -INF, INF) << endl;
    return 0;
}
  1. ①处应填( )。 {{ select(34) }}
  • x > lower_bound
  • x < lower_bound
  • a[x].v > lower_bound
  • a[x].v < lower_bound
  1. ②处应填( )。 {{ select(35) }}
  • x > upper_bound
  • x.v < upper_bound
  • a[x].v > upper_bound
  • a[x].v < upper_bound
  1. ③处应填( )。 {{ select(36) }}
  • a[x].r, a[x].v, lower_bound
  • a[x].r, lower_bound, a[x].v
  • a[x].l, a[x].v, lower_bound
  • a[x].l, lower_bound, a[x].v
  1. ④处应填( )。 {{ select(37) }}
  • a[x].r, a[x].v, upper_bound
  • a[x].r, upper_bound, a[x].v
  • a[x].l, a[x].v, upper_bound
  • a[x].l, upper_bound, a[x].v
  1. ⑤处应填( )。 {{ select(38) }}
  • 0
  • 1
  • -1
  • INF

(2)

有一个 n×n(1≤n≤5000)的矩阵 a,对任意相邻元素,右边比左边大,下面比上面大(即行、列均严格递增)。给定一个数 k,找出 k 所在的行和列。输入保证矩阵中的数各不相同,且 k 存在。

#include <iostream>
using namespace std;
int n, k, answerx, answery;
int a[5001][5001];
void FindKPosition(){
    int ①;
    while(j > 0){
        if(a[n][j] < k) break;
        j--;
    }
    ②;
    while(a[i][j] != k){
        while(③ && i > 1) i--;
        while(④ && j <= n) j++;
    }
    ⑤;
}
int main(){
    cin >> n;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++) cin >> a[i][j];
    cin >> k;
    FindKPosition();
    cout << answerx << " " << answery << endl;
    return 0;
}
  1. ①处应填( )。 {{ select(39) }}
  • i=1, j=1
  • i=1, j=n
  • i=n, j=1
  • i=n, j=n
  1. ②处应填( )。 {{ select(40) }}
  • i++
  • i--
  • j++
  • j--
  1. ③处应填( )。 {{ select(41) }}
  • a[i-1][j] > k
  • a[i][j] > k
  • a[i-1][j] < k
  • a[i][j] < k
  1. ④处应填( )。 {{ select(42) }}
  • a[i][j+1] > k
  • a[i][j] > k
  • a[i][j+1] < k
  • a[i][j] < k
  1. ⑤处应填( )。 {{ select(43) }}
  • answerx = i, answery = j
  • answerx = i, answery = j+1
  • answerx = i-1, answery = j
  • answerx = i-1, answery = j+1

CSP-J初赛模拟卷-2

未参加
状态
已结束
规则
IOI(严格)
题目
1
开始于
2026-6-30 0:00
结束于
2026-9-21 8:00
持续时间
2 小时
主持人