CSP 2024 提高级第一轮(CSP-S 2024)阅读程序第一题解析

2024年CSP-S1提高级第一轮题解 2024年CSP-S1提高级第一轮真题解析。 阅读详情
AI摘要

本文对CSP-S 2024提高级第一轮阅读程序第一题进行解析。先对程序中的函数进行分析,包括函数行为和功能;接着对判断题和选择题进行解答,如判断输出序列是否有序、分析输入输出结果、判断算法时间复杂度,以及选择函数功能和特定输入下的输出值等。

阅读程序第一题解析

#include <iostream>
using namespace std;

const int N = 1000;
int c[N];

int logic(int x, int y) {
    return (x & y) ^ ((x ^ y) | (~x & y));
}

void generate(int a, int b, int *c) {
    for (int i = 0; i < b; i++)
        c[i] = logic(a, i) % (b + 1);
}

void recursion(int depth, int *arr, int size) {
    if (depth <= 0 || size <= 1) return;
    int pivot = arr[0];
    int i = 0, j = size - 1;
    while (i <= j) {
        while (arr[i] < pivot) i++;
        while (arr[j] > pivot) j--;
        if (i <= j) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
            i++; j--;
        }
    }
    recursion(depth - 1, arr, j + 1);
    recursion(depth - 1, arr + i, size - i);
}

int main() {
    int a, b, d;
    cin >> a >> b >> d;
    generate(a, b, c);
    recursion(d, c, b);
    for (int i = 0; i < b; ++i) cout << c[i] << " ";
    cout << endl;
}

程序分析

logic函数

int logic(int x, int y) {
    return (x & y) ^ ((x ^ y) | (~x & y));
}

我们列举一些x和y,发现(x & y) ^ ((x ^ y) | (~x & y))等同于x | y:

xy(x & y) ^ ((x ^ y) | (~x & y))x | y
0333
0777
0888
1777
2133

用C++证明:

generate函数

void generate(int a, int b, int *c) {
    for (int i = 0; i < b; i++)
        c[i] = logic(a, i) % (b + 1);
}

函数行为:

  • 传入a,b(确保 c[i] 的值在 [0, b] 范围内),c数组。
  • 循环,从0到b。
    • 把a | i % (b + 1) 赋值给c[i]。

recursion函数

void recursion(int depth, int *arr, int size) {
    if (depth <= 0 || size <= 1) return;
    int pivot = arr[0];
    int i = 0, j = size - 1;
    while (i <= j) {
        while (arr[i] < pivot) i++;
        while (arr[j] > pivot) j--;
        if (i <= j) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
            i++; j--;
        }
    }
    recursion(depth - 1, arr, j + 1);
    recursion(depth - 1, arr + i, size - i);
}

recursion函数是一个带深度限制的快速排序的实现,排完序后数组不完全有序。(快速排序运用了分治的思想,每次找到一个任意下标的数,将小于该数的数放于左边,大于该数的数放于右边)。

判断题

  1. 当1000≥d≥b 时,输出的序列是有序的。(正确)
    解析:最坏情况下,快速排序的递归深度可能达到 b(退化为 O(n2))。
    但题目保证 d≥b,因此 递归不会提前终止,最终数组会被完全排序。
  2. 当输入 5 5 1 时,输出为 1 1 5 5 5。(错误)
    解析:
    generate(a = 5, b = 5, c):
    c[i] = (5 | i) % 6
i5 | i(二进制)5 | i(十进制)c[i] = (5 | i) % 6
0101 | 000 = 10155 % 6 = 5
1101 | 001 = 10155 % 6 = 5
2101 | 010 = 11177 % 6 = 1
3101 | 011 = 11177 % 6 = 1
4101 | 100 = 10155 % 6 = 5

c = {5, 5, 1, 1, 5}
recursion():

来自DeepSeek的《睿智》
第1层递归(d=1):
基准值 pivot = c[0] = 5。
分区过程:
i=0,j=4:
c[0]=5(>=5,不移动 i)
c[4]=5(<=5,不移动 j)
交换 c[0] 和 c[4](数组不变,仍为 [5, 5, 1, 1, 5])
i++ → i=1,j-- → j=3
i=1,j=3:
c[1]=5(>=5,不移动 i)
c[3]=1(<=5,不移动 j)
交换 c[1] 和 c[3] → 数组变为 [5, 1, 1, 5, 5]
i++ → i=2,j-- → j=2
i=2,j=2:
c[2]=1(<5,i++ → i=3)
c[2]=1(<=5,不移动 j)
循环终止(i > j)
分区结果:
左子数组:[5, 1, 1](j + 1 = 3)
右子数组:[5, 5](arr + i = c + 3,size - i = 2)
递归深度 d=0,不再继续递归。

  1. 假设数组 c 长度无限制,该程序所实现的算法的时间复杂度是 O(b) 的。(错误)
    解析:recursion()函数的复杂度不是O(b),若不考虑深度限制,平均复杂度是O(b log b)。

选择题

  1. 函数 int logic(int x, int y) 的功能是(B)
    A. 按位与
    B. 按位或
    C. 按位异或
    D. 以上都不是
    解析:我们列举一些x和y,发现(x & y) ^ ((x ^ y) | (~x & y))等同于x | y:
xy(x & y) ^ ((x ^ y) | (~x & y))x | y
0333
0777
0888
1777
2133
  1. 当输入为 10 100 100 时,输出的第 100 个数是?(C)
    A. 91
    B. 94
    C. 95
    D. 98
    解析:最坏情况下,快速排序需要n - 1重递归,而100 > 100 - 1,所以函数执行完毕c数组已经有序,答案就是(10 | i) % 101 i ∈ [0, 99]的最大值。
    10的二进制形式为:1010,所以与10相或必定第一位和第三位为1(从右起)。
十进制二进制
1001100100
991100011
981100010
971100001
961100000
951011111

95的第一位和第三位为1(从右起),所以选C。

CSP-S 2024第二轮真题解析 总体而言,这次比赛重点考察了学生的算法运用、逻辑思维、问题分析与解决能力,尤其是对贪心、动态规划等算法的深入理解和灵活运用。相比去年,思维能力考查更多,部分题难度有所提升,如第四题难度明显高于去年;不过对于冲一等奖的选手来说,重要得分题目第二题的难度相比去年降低较多,所以复赛一等奖分数线可能会在去年基础上略微提升。2024 年 10 月 26 日,CSP-S 2024 第二轮认证已结束。此次试卷整体有一定难度梯度与知识覆盖面。以下是本次复赛详细解析,希望同学们认真研读题解,总结经验教训,提升自身能力。 阅读详情

相关推荐

《csp-s2024复赛真题》 简介与解析

这是一份关于2024年CCF非专业级软件能力认证CSP-J/S第二轮认证提高级的详细题目和要求说明。以下是对您提供的信息的解读:认证基本信息‌时间‌:2024年10月26日14:30~18:30‌题目类型‌:传统型(意味着题目可能是算法或数据结构相关的问题)题目详情‌决斗(duel)‌‌可执行文件名‌:duel‌输入文件名‌:duel.in‌输出文件名‌:duel.out‌时限‌:1.0秒‌内存限制‌:512 MiB‌测试点数目‌:20‌测试点是否等分‌:是。

专门发一些c++题解 4018

CSP-S 2024 提高级 第一轮试题(初赛)答案及解析

1.在 Linux 系统中,如果你想显示当前工作目录的路径,应该使用哪个命令?( )A. pwdB. cdC. lsD. echo答:Apwd (英文全拼:print work directory) 命令用于显示工作目录。cd (英文全拼:change directory)命令用于改变当前工作目录的命令,切换到指定的路径。ls (英文全拼: list directory contents)命令用于显示指定工作目录下之内容。

君义NOIP的博客 1万+

2024年CSP-S第一轮认证试题解析

通过分析可以发现,logic函数的功能就是求x|y的值,generate函数生成的数组c[i]=(a|i)%(b+1),recursion函数是限制深度最大为d的快速排序。(3)题目的目的是在n个数字中取出两个数,使得它们数字差的绝对值小于等于m,至少要有k种方案,求m的最小值。(2) (次短路)已知有一个 n 个点 m 条边的有向图 G,并且给定图中的两个点 s 和 t,求次短路(长度严格大于最短路的最短路径)。26. 若 n=8,m=8,solve 和 solve2 的返回值的最大可能的差值为()

lan_in的博客 3071

CSP-S 2024 提高级 第一轮(初赛) 完善程序(1)

以及已知b数组的下标范围为[0, n),那么可知upper_bound的意义是:在左闭右开区间[a, an)指向的序列范围内找ai的上界,也就是大于ai的最小值的最小下标,这和STL中upper_bound的参数概念相同。而后遍历a数组,在a数组中选出元素a[i],而后看一下在b中有多少个元素与a[i]相加的结果都是小于等于sum的。在加和小于等于mid的数对的个数为k个的前提下,当mid不断减小直到最小时,mid就是第k小的数对的加和。第(2)空填需要满足的条件,二分求的是大于ai的最小值。

君义NOIP的博客 5266

CSP-S 2024提高级初赛深度复盘:考点解析与备考策略

信息学奥赛初赛侧重算法逻辑与代码阅读能力,涉及数据结构、递归、动态规划等核心概念。理解算法原理与时间复杂度分析是技术价值所在,广泛应用于竞赛选拔与编程能力评估。CSP-S 2024提高级第一轮试题强调数学推理与程序跟踪,阅读程序和完善程序占70分,成为晋级关键。本文深入解析各板块考点,提供逐段拆解与避坑指南,助力选手高效备考。

weixin_30072453的博客 275

2024年CSP-S认证 CCF信息学奥赛C++ 中小学提高组 第一轮真题讲解 阅读程序题解析

本文分析了2024年CCF认证CSP-S第一轮的三道程序设计题。第一题考查逻辑运算和递归排序,通过logic函数实现位运算,递归函数实现部分快速排序。第二题采用动态规划和暴力法计算二进制子序列数值之和,重点分析了两种解法的时间复杂度差异。第三题实现了基于双哈希的树结构算法,通过埃拉托斯特尼筛法处理素数,并构建哈希树进行统计。每道题都包含判断题和单选题,考察程序逻辑、时间复杂度和输出结果分析能力。解题需理解位运算、递归、动态规划、哈希算法等核心概念,并注意输入输出特性的影响。

青少年编程学习指导 1481

CSP-S 2024 提高级 第一轮(初赛) 阅读程序(1)

前面的下标i选择大于等于pivot的元素,后面的下标j选择小于等于pivot的元素,二者交换。选择c[0]为标杆元素,从前向后找第一个大于等于c[0]的元素是c[0],从后向前找第一个小于等于c[0]的元素为c[4],二者交换,由于二者的数值都为5,所以c数组从数值角度来看没有变化。当B不是A的子集时,a ^ b表示的是在A中但不在B中的元素,以及在B中但不在A中元素构成的集合,即。表示在X中但不在Y中的元素,以及在Y中但不在X中元素构成的集合,也就是。,也就是在集合Y中但不在集合X中的元素构成的集合。

君义NOIP的博客 7161

2024年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第2题)

2024年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第2题)

王老师青少年编程 807

CSP-J1 CSP-S1 第1轮 初赛模拟题及书籍

CSP-J1 CSP-S1 第1轮 初赛模拟题及书籍

青少年趣味编程 5997

2024年山东省信息学小学组(CSP-X)第一轮题解

2024年山东省信息学小学组(CSP-X)第一轮题解。

少儿编程乔老师 1491

2024年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第1题)

2024年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第1题)

王老师青少年编程 717

CSP-S1 2019-2024 第1轮 初赛 真题解析

CSP-S1 2019-2024 第1轮 初赛 真题解析

青少年趣味编程 2428

2024年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第3题)

2024年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第3题)

王老师青少年编程 972

CSP-S 2024 提高级 第一轮(初赛) 阅读程序(3)

的认定是不同的,两个基数也不同,不同串经过两种哈希过程得到相同哈希值都相等的概率很小,我们可以认为不会出现哈希冲突。solve函数中,i从n到1循环,将h[i]的哈希值设为H(p[i]),可以理解为生成一个长为1的串,如果p[i]为true,串就是"1";(见【题目考点】4)观察solve函数,i从n循环到1,循环内无论是H类对象的构造函数,还是H类对象的+运算,都是O(1)复杂度。因此该循环的复杂度是。lb为序列的下界,ub为序列的上界,下界与上界的类型为指针或迭代器,表示左闭右开区间[lb, ub)。

君义NOIP的博客 4481

CSP-S 2024 提高级第一轮试题(初赛)真题

2025年CSP(信奥赛)临近,特提供往年真题,供大家学习与参考使用,如有雷同,请删除。2 CSP-S 2024 提高级第一轮试题(初赛)真题

FreeRTOS面试题汇总

如果一个低优先级的任务持有一个信号量,高优先级的任务想要用这个信号量,造成的死锁怎么解决。12.FreeRTOS的多任务之间如何去进行通信的,什么方法,它实现原理是什么。任务间数据传输一共有三种形式,用的最多的是消息队列,其次是全局变量和信号量。简历上写了了解RTOS,问了rtos的问题,用过哪些函数。讲解FreeRtos原理,调度机制,底层原理,代码调用。FreeRTOS,你的三个任务控制,请问你是怎么实现的。freertos中EventBits_t是干啥的?freertos使任务切换的方式有哪些?

weixin_45636780的博客 1万+

2024 CSP-J1 CSP-S1 第1轮 初赛 真题讲解 逐题详细解析

2024 CSP-J1 CSP-S1 第1轮 初赛

青少年趣味编程 3389

基于cat12搞定SBM的ROI的统计分析——vertex水平和ROI水平的双样本T检验

前言 一、Atlas皮层图谱介绍 二、SBM分析——主要以皮层四种常用指标中的厚度(thickness)和沟深(depth)为主

Sophia2023的博客 8744

CSP-S 2024 提高级 第一轮(初赛) 阅读程序(2)

例:如j为0,s[i]为’1’,那么k = (j

君义NOIP的博客 5459

声音事件检测metric:PSDS

这项工作为多声道声音事件检测(SED)系统的性能评估定义了一个新的框架,它克服了传统的collar-based事件决定、事件F-cores和事件错误率的限制。拟议的框架引入了对事件检测的定义,该定义对标签的主观性更为稳健。它还采用了多声道接收器操作特性(ROC)曲线,以提供比F1分数更全面的系统性能洞察力,并建议将这些曲线简化为单一的多声道声音检测分数(PSDS),这允许系统独立于操作点(OPs)进行比较。所提出的方法还能更好地了解不同声音类别的数据偏差和分类稳定性。

Maestro_T的博客 2727

(遇到问题)(已解决)word敲入的公式转化为mathtype

https://www.mathtype.cn/wenti/wordgongshi-zhuanhuan.html 现在越来越多的人在文档中编辑公式的时候会选择MathType来编辑,因为它包含有众多的数学符号和模板,编辑公式时非常方便。但是也有一些人在编辑公式时没有使用MathType公式编辑器,直接使用Word中自带的公式编辑器来编辑的。当我们需要要共享一份文件的时候,这种用自带公式编辑器编辑出来的文件,在我们安装有MathType公式编辑器的电脑里打开时,双击公式没有反应,是无法对它们进行修改的.

计算机视觉 1万+

2024 CSP-J1 CSP-S1 第1轮 初赛 学习资料集

2024 CSP-J1 CSP-S1 第1轮 初赛 学习资料集(2024.06.10)

青少年趣味编程 2774

matlab 点云按高程进行赋色【2024最新版】

首先按照Z轴方向求取所在点云的高程极值(包括高程最大值与最小值),然后将高程归一化到0~255范围内,最后采用matlab中的colormap颜色渲染函数进行赋色并保存渲染结果到点云。

点云侠的博客 3340
上一篇: 手把手教你制作MFC登录程序(超级详细)
下一篇: CSP 2024 提高级第一轮(CSP-S 2024)单选题解析
applelinlzx
博客等级 码龄3年 1040粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值