news 2026/3/2 1:07:07

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2024年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第3题)

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

第 3 题
#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;constintmaxn=1000000+5;constintP1=998244353,P2=1000000007;constintB1=2,B2=31;constintK1=0,K2=13;typedeflonglongll;intn;boolp[maxn];intp1[maxn],p2[maxn];structH{inth1,h2,l;H(boolb=false){h1=b+K1;h2=b+K2;l=1;}Hoperator+(constH&h)const{H hh;hh.l=l+h.l;hh.h1=(1ll*h1*p1[h.l]+h.h1)%P1;hh.h2=(1ll*h2*p2[h.l]+h.h2)%P2;returnhh;}booloperator==(constH&h)const{returnl==h.l&&h1==h.h1&&h2==h.h2;}booloperator<(constH&h)const{if(l!=h.l)returnl<h.l;elseif(h1!=h.h1)returnh1<h.h1;elsereturnh2<h.h2;}}h[maxn];voidinit(){memset(p,1,sizeof(p));p[0]=p[1]=false;p1[0]=p2[0]=1;for(inti=1;i<=n;++i){p1[i]=(1ll*B1*p1[i-1])%P1;p2[i]=(1ll*B2*p2[i-1])%P2;if(!p[i])continue;for(intj=2*i;j<=n;j+=i){p[j]=false;}}}intsolve(){for(inti=n;i;--i){h[i]=H(p[i]);if(2*i+1<=n){h[i]=h[2*i]+h[i]+h[2*i+1];}elseif(2*i<=n){h[i]=h[2*i]+h[i];}}cout<<h[1].h1<<endl;sort(h+1,h+n+1);intm=unique(h+1,h+n+1)-(h+1);returnm;}intmain(){cin>>n;init();cout<<solve()<<endl;}
判断题
  1. 假设程序运行前能自动将maxn改为n+1,所实现的算法的时间复杂度是 O(nlog⁡n)。( )

    A. 正确 B. 错误

  2. 时间开销的瓶颈是init()函数。( )

    A. 正确 B. 错误

  3. 若修改常数B1K1的值,该程序可能会输出不同的结果。( )

    A. 正确 B. 错误

选择题
  1. solve()函数中,h[]的合并顺序可以看作是( )?

    A. 二叉树的 BFS 序 B. 二叉树的先序遍历 C. 二叉树的中序遍历 D. 二叉树的后序遍历

  2. 输入 10,输出的第一行是?( )

    A. 83 B. 424 C. 54 D. 110101000

  3. 输入 16,输出的第二行是?( )

    A. 7 B. 9 C. 10 D. 12

题解

程序分析

该程序实现了一个基于双哈希的子树哈希计算算法,主要步骤包括:

  1. 初始化:使用筛法标记1n中的质数,并预计算两个基数的幂(模P1P2)。
  2. 子树哈希计算:从n1逆序遍历节点,将每个节点视为一棵二叉树的根(左子为2*i,右子为2*i+1),计算该子树的中序遍历字符串的双哈希值。
  3. 输出:第一行输出根节点h[1]的第一个哈希分量h1;第二行输出所有子树哈希值中不同值的个数。
判断题解析
  1. 时间复杂度
    程序包含三部分:

    • init():筛法复杂度为O(n log log n),预计算幂为O(n)
    • solve():遍历和合并哈希为O(n)
    • 排序h数组为O(n log n)
      总时间复杂度由排序主导,为O(n log n),故正确
  2. 对于较大的n,排序的O(n log n)远大于init()O(n log log n),因此瓶颈在排序而非init(),故错误

  3. B1K1直接影响哈希值的计算,改变它们可能导致不同的哈希结果,从而影响输出,故正确

选择题解析
  1. 对于节点i,合并操作为h[2*i] + h[i] + h[2*i+1],对应二叉树的中序遍历(左子树 → 根 → 右子树),故选C

  2. 模拟计算得h[1].h1 = 83,故选A

  3. 所有子树的中序遍历字符串共有 10 种不同的值,故不同哈希值的个数为 10,故选C


专栏推荐:信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新)
https://blog.csdn.net/weixin_66461496/category_13125089.html


各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}

1、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html

2、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

CSP信奥赛C++一等奖通关刷题题单及题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

3、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转


GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html

4、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/27 12:34:09

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

2024年信奥赛C提高组csp-s初赛真题及答案解析&#xff08;完善程序第1题&#xff09; 第 1 题 &#xff08;序列合并&#xff09; 有两个长度为 N的单调不降序列 A和 B&#xff0c;序列的每个元素都是小于 10910^9109的非负整数。在 A和 B中各取一个数相加可以得到 N2^22个和&…

作者头像 李华
网站建设 2026/3/1 19:27:45

DSP28335实战指南:PIE中断向量表配置与优化技巧

1. DSP28335中断系统架构解析 第一次接触DSP28335的中断系统时&#xff0c;我被它复杂的三级中断机制搞得一头雾水。直到在真实项目中踩了几个坑&#xff0c;才真正理解TI这样设计的精妙之处。简单来说&#xff0c;这套机制就像是个高效的中转站&#xff0c;把58个外设中断源合…

作者头像 李华
网站建设 2026/2/25 5:46:55

CANN仓库许可证合规性检查 开源协议在代码中的体现

摘要 本文深度剖析CANN仓库的开源许可证合规性管理体系。通过解读仓库中LICENSE文件结构、各模块许可证声明机制&#xff0c;分析CANN如何系统化遵循Apache 2.0、BSD等多重开源协议。核心涵盖许可证检查算法实现、知识产权边界管理、合规性自动化流水线设计&#xff0c;为企业…

作者头像 李华
网站建设 2026/2/24 8:45:44

RAG企业智能客服从零搭建指南:核心架构与避坑实践

RAG企业智能客服从零搭建指南&#xff1a;核心架构与避坑实践 摘要&#xff1a;本文针对开发者搭建RAG企业智能客服系统时的常见痛点&#xff08;如知识库更新延迟、多轮对话逻辑混乱、响应速度慢&#xff09;&#xff0c;详解基于LlamaIndex和LangChain的模块化架构设计。通过…

作者头像 李华
网站建设 2026/2/27 5:32:11

ChatTTS 入门指南:从零构建你的第一个语音对话系统

1. ChatTTS 是什么&#xff1f;能做什么&#xff1f; 第一次听到 ChatTTS 时&#xff0c;我把它当成“又一个语音合成轮子”。真正跑通 demo 才发现&#xff0c;它把语音识别&#xff08;ASR&#xff09;→ 大模型对话&#xff08;LLM&#xff09;→ 语音合成&#xff08;TTS&…

作者头像 李华
网站建设 2026/3/1 16:37:27

从标准到私密:Teams 团队迁移的挑战与解决方案

在当今的企业协作中,Microsoft Teams 已经成为了不可或缺的工具之一。随着团队的成长和需求的变化,团队管理员常常需要调整团队的设置以满足新的需求。然而,当你需要将现有的团队从“标准”模式迁移到“私密”模式时,你可能会遇到一些意想不到的挑战。 背景介绍 最近,我…

作者头像 李华