【无标题】CSP历年真题题解思考过程 ——6
CSP历年真题题解思考过程 —— 6P7912 [CSP-J 2021] 小熊的果篮70分模拟解法AC解法P8815 [CSP-J 2022] 逻辑表达式AC解法P7912 [CSP-J 2021] 小熊的果篮题干链接70分模拟解法我们只需要从左往右遍历所有水果模拟就行了。遇到一个水果如果他和上个水果颜色不同那就是队头则取走然后打上标记说明已经取走下次只要取第一个颜色不同且没打标记的水果就行。while(rn){l-1;for(int32_ti1;in;i){if(l!int32_t(a[i])!u[i]){r;u[i]true;la[i];couti ;}}cout\n;}AC解法容易发现我们每次循环都重复经过了大量已经被取走的水果这就是超时的元凶。结合题意考虑使用双端队列来存储“块”每轮遍历所有块依次取出队头输出。然后再次遍历所有块空的扔了好的和上个比较如果同色就直接合并异色才插入。这样就能让常数降下来一点不会退化到O ( n 2 ) \mathcal{O}(n^2)O(n2)。int32_tl-1;arraybool,200005a;dequedequeint32_tv;for(int32_ti1;in;i){cina[i];if(l!int32_t(a[i])){la[i];v.emplace_back();}v.back().push_back(i);}while(!v.empty()){for(autoi:v){int32_thi.front();couth ;i.pop_front();}cout\n;dequedequeint32_tvv;while(!v.empty()){autonowv.front();v.pop_front();if(now.empty())continue;if(!vv.empty()a[now.front()]a[vv.back().front()]){vv.back().insert(vv.back().end(),range(now));}else{vv.push_back(move(now));}}vmove(v)}P8815 [CSP-J 2022] 逻辑表达式题干链接AC解法对于这种题一个通用的解法就是先建树然后在树上分析。怎么建树这里我们介绍一下“递归下降算法”。简单说就是将解析某种运算这里是或与括号和字面量的过程单独拆分成函数然后按照优先级在每种解析函数中调用下一级的解析函数这里是或调用与获得左右子树与调用括号和字面量获得左右子树括号调用或获取括号内内容来构造这一级的树。structexpr{int32_tk;// 0: num 1: and 2: or 3: parenbooln;shared_ptrexprl,r;expr(int32_tk,booln,shared_ptrexprl,shared_ptrexprr):k(k),n(n),l(l),r(r){}};int32_tpos;shared_ptrexprp_or();shared_ptrexprp_val(){if(s[pos]0||s[pos]1){autovalstd::make_sharedexpr(0,s[pos]-0,nullptr,nullptr);pos;returnval;}elseif(s[pos](){pos;autoinnermake_sharedexpr(3,0,p_or(),nullptr);pos;returninner;}}shared_ptrexprp_and(){autolp_val();while(s[pos]){pos;autorp_val();lmake_sharedexpr(1,0,l,r);}returnl;}shared_ptrexprp_or(){autolp_and();while(s[pos]|){pos;autorp_and();lmake_sharedexpr(2,0,l,r);}returnl;}看到p_or中我们用一个while反复的调用下一级的函数然后构造之后放到左边这是因为或是左结合的运算我们可以始终把较左边的运算放在树的左子上而与运算也是同理。括号中我们忽略了优先级调用了最高级的或运算这正是“括号先算”的运算特性。得到了语法树之后我们就可以自上而下地遍历整棵树。对于一个字面量树我们不需要执行任何操作他不需要求值也不会产生短路。对于一个与树我们先求值它的左子树如果为假那就说明有短路了直接将自己也设为假然后返回如果为真那就无事发生求值右子树即可。或运算差不多只不过是看左子树是否为真。对于括号直接求值内部即可。int32_ts_and,s_or;voiddfs(shared_ptrexpre){if(e-k0){return;}if(e-k1){dfs(e-l);if(!e-l-n){e-nfalse;s_and;return;}dfs(e-r);e-ne-r-n;}if(e-k2){dfs(e-l);if(e-l-n){e-ntrue;s_or;return;}dfs(e-r);e-ne-r-n;}if(e-k3){dfs(e-l);e-ne-l-n;}}

相关新闻

C#方法编程指南:从基础到高级应用

C#方法编程指南:从基础到高级应用

1. C#方法基础概念解析 在C#编程中,方法(Method)是构成程序逻辑的基本单元,它封装了一系列执行特定功能的代码块。简单来说,方法就是告诉计算机"如何做"的指令集合。每个C#程序至少包含一个Main方法&#xf…

2026/10/25 13:21:32 阅读更多 →
2026金昌危房鉴定检测怎么选?老旧房危房鉴定靠谱机构 TOP 结构安全检测+ 报告可查 电话汇总

2026金昌危房鉴定检测怎么选?老旧房危房鉴定靠谱机构 TOP 结构安全检测+ 报告可查 电话汇总

金昌的危房鉴定市场近年热度攀升,老旧小区业主、乡镇自建房住户、商铺经营者、园区厂房以及学校医院纷纷寻求房屋安全评估。市面上机构鳞次栉比,却鱼龙混杂,不少无资质单位出具的鉴定报告根本无法通过住建审核,白白耗费业主时间与…

2026/10/25 8:39:45 阅读更多 →
2026锦州危房鉴定检测怎么选?老旧房危房鉴定靠谱机构 TOP 结构安全检测+ 报告可查 电话汇总

2026锦州危房鉴定检测怎么选?老旧房危房鉴定靠谱机构 TOP 结构安全检测+ 报告可查 电话汇总

锦州老旧房屋鳞次栉比,危房鉴定机构鱼龙混杂,不少老旧小区业主、乡镇自建房住户、商铺经营者乃至园区厂房、学校医院都亟需一份权威可靠的危房安全评估报告。市面上部分无资质机构出具的检测报告往往无法通过住建部门审核,让人白费功夫。小编…

2026/10/25 17:58:57 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/25 22:36:10 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/26 4:52:12 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/26 5:00:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/26 3:16:46 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 12:00:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 13:21:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 8:34:37 阅读更多 →