A. CSP-J初赛模拟卷25-5

    客观题

CSP-J初赛模拟卷25-5

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

普及组 CSP-J 2025 初赛模拟卷 5

一、单项选择题

  1. 十进制数 2025 的十六进制表示是( )。 {{ select(1) }}
  • 07D9
  • 07E9
  • 07F9
  • 07F1
  1. 以下关于计算机竞赛 IOI 的描述正确的是( )。 {{ select(2) }}
  • IOI 非英语国家参赛选手可以在比赛中携带电子词典
  • IOI 参赛选手可携带已关机的手机放在自己座位后面的包里
  • IOI 参赛选手在比赛时间内去厕所的时候可携带手机
  • IOI 全称是国际信息学奥林匹克竞赛
  1. 以下不能用 ASCII 码表示的字符是( )。 {{ select(3) }}
  • @
  • ^
  • ~
  1. 设变量 s 为 double 型且已赋值,下列哪条语句能将 s 中的数值保留到小数点后一位,并将第二位四舍五入?( ) {{ select(4) }}
  • s = (x * 10 + 0.5) / 10.0
  • s = s * 10 + 0.5 / 10.0
  • s = (s / 10 + 0.5) * 10.0
  • s = (int)(s * 10 + 0.5) / 10.0
  1. 以下不属于 STL 链表中的函数的是( )。 {{ select(5) }}
  • sort
  • empty
  • push_back
  • resize
  1. 小明写了一个程序,在这里用到的数据结构是( )。
#include <iostream>
using namespace std;
int k;
int f(int a)
{
    if(a-k > 0 && (a-k) % 2 == 0)
        return f((a+k)/2) + f((a-k)/2);
    else
        return 1;
}
int main()
{
    int n;
    cin >> n >> k;
    if((n+k) & 1)
    {
        cout << 1 << endl;
        return 0;
    }
    cout << f(n);
    return 0;
}

{{ select(6) }}

  • 链表
  • 队列
  1. 小明想求 \( n \) 个不同正整数的全排列,他设计的程序采用 DFSI 方法的时间复杂度是( )。 {{ select(7) }}
  • \( O(\log n) \)
  • \( O(n!) \)
  • \( O(n^2) \)
  • \( O(n\log n) \)
  1. 在下列排序算法中,( )是不稳定的排序算法。 {{ select(8) }}
  • 归并排序
  • 插入排序
  • 选择排序
  • 冒泡排序
  1. 一台 32 位操作系统的计算机运行 C++,下列说法中错误的是( )。 {{ select(9) }}
  • double 类型的变量占用 8 字节内存空间
  • bool 类型的变量占用 1 字节内存空间
  • long long 类型变量的取值范围比 int 类型变量的大一倍
  • char 类型的变量也可以作为循环变量
  1. 若整型变量 n 的值为 25,则表达式 n & (n+1>1) 的值是( )。 {{ select(10) }}
  • 25
  • 26
  • 9
  • 16
  1. 一群学生参加学科夏令营,每名同学至少参加一个学科的考试。已知有 100 名学生参加了数学考试,50 名学生参加了物理考试,48 名学生参加了化学考试,学生总数是参加至少两门考试学生的两倍,也是参加三门考试学生数的三倍,则学生总数( )。 {{ select(11) }}
  • 90
  • 96
  • 108
  • 120
  1. 以下不是 C++中的循环语句的是( )。 {{ select(12) }}
  • while
  • do...while
  • for
  • switch...case
  1. 二叉树 T,已知其后序遍历序列为 4 2 7 5 6 3 1,中序遍历序列为 4 2 1 5 7 6,则其前序遍历序列为( )。 {{ select(13) }}
  • 1 2 5 7 6 3 4
  • 1 2 4 3 5 7 6
  • 1 4 2 7 5 3 6
  • 1 4 7 2 3 5 6
  1. 一个六位数是完全平方数,且最后三位数字都是 4,这样的六位数有( )个。 {{ select(14) }}
  • 2
  • 3
  • 4
  • 5
  1. 用三种颜色给 1×4 的长方形方格区域涂色,在每种颜色至少用 1 次的前提下,相邻方格不涂同一种颜色的概率为( )。 {{ select(15) }}
  • 1/3
  • 2/3
  • 1/2
  • 4/9

二、阅读程序

程序一

01 #include <bits/stdc++.h>
02 using namespace std;
03
04 int solve(vector<int>& nums)
05 {
06    map<int, int> cnt;
07    int tot = 0;
08    for(auto v: nums)
09    {
10       cnt[v]++;
11       tot += v;
12    }
13    int ans = -155;
14    for(auto v: nums)
15    {
16       cnt[v]--;
17       if((tot - v) % 2 == 0 && cnt[(tot - v) / 2] > 0)
18          ans = max(ans, v);
19       cnt[v]++;
20    }
21    return ans;
22 }
23
24 int main()
25 {
26    int n;
27    cin >> n;
28    vector<int> a(n);
29    for(int i = 0; i < n; i++)
30       cin >> a[i];
31    cout << solve(a) << endl;
32    return 0;
33 }
  1. 若程序输入 5 -2 -1 -3 -6 4,则程序输出 4。 ( ) {{ select(16) }}
  • 正确
  • 错误
  1. 对于第 17 行的代码,如果不判断(tot - v) % 2 == 0,则程序依然可以得到正确的结果。 ( ) {{ select(17) }}
  • 正确
  • 错误
  1. 若将头文件<bits/stdc++.h>换为,程序依然可以正常运行。( ) {{ select(18) }}
  • 正确
  • 错误
  1. 若输入 8 6 -31 50 -35 41 37 -42 13,则输出是( )。 {{ select(19) }}
  • 13
  • -35
  • -31
  • -100000
  1. 如果去除第 19 行的代码,对于输入 4 2 3 5 10,输出是( )。 {{ select(20) }}
  • 2
  • 5
  • 10
  • -100000

程序二

01 #include <bits/stdc++.h>
02 using namespace std;
03
04 const int inf = 0x3f3f3f;
05
06 int solve(vector<string>& words, string target)
07 {
08    const int n = target.length();
09    set<string> s;
10    for(auto v: words)
11       for(int i = 1; i <= v.length(); i++)
12          s.insert(v.substr(0, i));
13    vector<int> dp(n + 1, inf);
14    dp[0] = 0;
15    for(int i = 0; i < n; i++)
16       for(int j = 0; j <= i; j++)
17          if(s.find(target.substr(j, i - j + 1)) != s.end())
18             dp[i + 1] = min(dp[i + 1], dp[j] + 1);
19    return dp[n] != inf ? dp[n] : -1;
20 }
21
22 int main()
23 {
24    int n;
25    cin >> n;
26    vector<string> a(n);
27    for(int i = 0; i < n; i++)
28       cin >> a[i];
29    string t;
30    cin >> t;
31    cout << solve(a, t) << endl;
32    return 0;
33 }
  1. 若输入 3 abc aaaaa bcdef aabcdabc,则输出为 2。 ( ) {{ select(21) }}
  • 正确
  • 错误
  1. 若将第 18 行中的 dp[i + 1]改为 dp[i],则可能出现编译错误。 ( ) {{ select(22) }}
  • 正确
  • 错误
  1. (2 分) 该程序的输出一定小于或等于输入的 \(n\)。 ( ) {{ select(23) }}
  • 正确
  • 错误
  1. 当输入的 a 数组为 {"abababab", "ab" },t="ababababa"时,程序的输出为( )。 {{ select(24) }}
  • 0
  • 1
  • 2
  • 3
  1. 若删除第 17 行的代码,则当输入的 a 数组为 {"abababab", "ab"} ,t="ababa"时,程序的输出为( )。 {{ select(25) }}
  • 1
  • 2
  • 3
  • 4
  1. (4 分)这段代码的时间复杂度为( )。 {{ select(26) }}
  • \( O(n) \)
  • \( O(nlogn) \)
  • \( O(n^2) \)
  • \( O(n^2logn) \)

程序三

01 #include <bits/stdc++.h>
02 using namespace std;
03
04 int calc(int n, int presses)
05 {
06    set<int> seen;
07    for (int i = 0; i < (1 << 4); i++)
08    {
09       vector<int> pressArr(4);
10       for (int j = 0; j < 4; j++)
11          pressArr[j] = (i >> j) & 1;
12       int sum = 0;
13       for(int j = 0; j < 4; j++)
14          sum += pressArr[j];
15       if (sum % 2 == presses % 2 && sum <= presses)
16       {
17          int status = pressArr[0] ^ pressArr[2] ^ pressArr[3];
18          if (n >= 2)
19             status |= (pressArr[0] ^ pressArr[1]) << 1;
20          if (n >= 3)
21             status |= (pressArr[0] ^ pressArr[2]) << 2;
22          if (n >= 4)
23             status |= (pressArr[0] ^ pressArr[1] ^ pressArr[3]) << 3;
24          seen.insert(status);
25       }
26    }
27    return seen.size();
28 }
29
30 int main()
31 {
32    int n, presses;
33    cin >> n >> presses;
34    cout << calc(n, presses) << endl;
35    return 0;
36 }
  1. 若输入为 2 1,则程序的输出为 3。 ( ) {{ select(27) }}
  • 正确
  • 错误
  1. 对于第 7 行代码,变量 i 的上界为 16。 ( ) {{ select(28) }}
  • 正确
  • 错误
  1. 对于任意的输入,程序的输出不会大于 8。 ( ) {{ select(29) }}
  • 正确
  • 错误
  1. 当输入为 \(n=3, \text{presses}=2\) 时,程序的输出为 ( )。 {{ select(30) }}
  • 5
  • 6
  • 7
  • 8
  1. (4 分)若删除第 18~19 行的代码,当输入为 \(n=3, \text{presses}=2\) 时,程序的输出为 ( )。 {{ select(31) }}
  • 1
  • 2
  • 3
  • 4
  1. 上述代码的时间复杂度为 ( )。 {{ select(32) }}
  • \(O(1)\)
  • \(O(\log n)\)
  • \(O(n)\)
  • \(O(n\log n)\)

三、完善程序

程序一:

输入 \( n \)\( 1 \leq n \leq 2 \times 10^5 \))和长为 \( n \) 的数组 \( a \)\( 1 \leq a[i] \leq n \))。 你可以多次执行如下操作:选择两个下标 \( i \)\( j \),满足 \( a[i] = a[j] \)。删除下标 \( [i, j] \) 中的元素。删除后,数组长度减小 \( i-j+1 \)。 输出你最多可以删多少个数。

01 #include <bits/stdc++.h>
02 using namespace std;
03
04 const int inf = 0x3f3f3f3f;
05
06 void solve()
07 {
08    int n;
09    cin >> n;
10    vector<int> a(n + 1);
11    for(int i = 1; i <= n; i++)
12       cin >> a[i];
13    vector<int> dp(n + 1), ①;
14    for(int i = 1; i <= n; i++)
15    {
16       dp[i] = max(dp[i], ②);
17       dp[i] = max(dp[i], ③);
18       lst[a[i]] = max(lst[a[i]], ④);
19    }
20    cout << ⑤ << endl;
21    return;
22 }
23
24 int main()
25 {
26    int t = 1;
27    cin >> t;
28    while(t--)
29       solve();
30    return 0;
31 }
  1. ①处应填( )。 {{ select(33) }}
  • lst(n+1)
  • lst(n+1,0)
  • lst(n+1,inf)
  • lst(n+1,-inf)
  1. ②处应填( )。 {{ select(34) }}
  • dp[i-1]
  • dp[i]-1
  • dp[i+1]
  • dp[i]+1
  1. ③处应填( )。 {{ select(35) }}
  • lst[a[i]]
  • lst[a[i]]+i+1
  • lst[a[i]]+i
  • lst[i]+i
  1. ④处应填( )。 {{ select(36) }}
  • dp[i-1]-i
  • dp[i-1]+i
  • dp[i+1]-i
  • dp[i+1]+i
  1. ⑤处应填( )。 {{ select(37) }}
  • dp[1]
  • dp[0]
  • dp[n-1]
  • dp[n]

程序二:

题目描述: 输入 \( n \)\( 1 \leq n \leq 1 \times 10^5 \))和长为 \( n \) 的数组 \( a \)\( 0 \leq a[i] < 2^{20} \))。 输出最小的正整数 \( k \),使得 \( a \) 的所有长为 \( k \) 的连续子数组的 OR 都相同。注意答案是一定存在的,因为 \( k=n \) 一定满足要求。

01 #include <bits/stdc++.h>
02 using namespace std;
03 void solve()
04 {
05    int n;
06    cin >> n;
07    vector<int> a(n + 1);
08    for(int i = 1; i <= n; i++)
09       cin >> a[i];
10    int ans = 0;
11    for(int i = 0; ①; i++)
12    {
13       int cnt = 0, lst = 0;
14       for(int j = 1; j <= n; j++)
15       {
16          if(②)
17             cnt++;
18          else
19             lst = ③, cnt = 0;
20       }
21       lst = max(lst, cnt);
22       if(④)
23          continue;
24       ans = max(ans, lst + 1);
25    }
26    cout << ⑤ << endl;
27 }
28
29 int main()
30 {
31    int t = 1;
32    cin >> t;
33    while(t--)
34       solve();
35    return 0;
36 }
  1. ①处应填( )。 {{ select(38) }}
  • i < 20
  • i <= 20
  • i > 20
  • i != 20
  1. ②处应填( )。 {{ select(39) }}
  • !(a[i] & (1 << j))
  • a[i] & (1 << j)
  • a[j] & (1 << i)
  • !(a[j] & (1 << i))
  1. ③处应填( )。 {{ select(40) }}
  • min(lst, cnt)
  • max(lst, cnt)
  • cnt
  • lst + cnt
  1. ④处应填( )。 {{ select(41) }}
  • lst < n
  • lst != n
  • lst == n
  • lst > n
  1. ⑤处应填( )。 {{ select(42) }}
  • ans
  • min(ans, n)
  • min((ans==021:ans), n)
  • (ans==021:ans)

CSP-J初赛模拟卷25-5

未参加
状态
已结束
规则
IOI(严格)
题目
1
开始于
2025-9-5 0:00
结束于
2025-9-25 20:00
持续时间
2 小时
主持人
参赛人数
0