CSP历年真题题解思考过程 —— 2
CSP历年真题题解思考过程 —— 2P7072 [CSP-J 2020] 直播获奖100pts解法P5658 [CSP-S 2019] 括号树20pts解法55pts解法70pts解法100ptsP7073 [CSP-J 2020] 表达式50pts解法100pts解法P7072 [CSP-J 2020] 直播获奖题干链接100pts解法注意到数据规模中每个选手成绩不超过600分容易想到桶存储。for(int32_ti1;in;i){slmax(1,int32_t(floor(i*w*1.0f/100)));cinai;b[ai];for(int32_ti600;i0;i--){sl-b[i];if(sl0){couti ;break;}}}P5658 [CSP-S 2019] 括号树题干链接20pts解法观察数据范围发现前4个点中f i i − 1 f_i i-1fi​i−1这说明树呈一条链并且因为数据不大我们可以尝试对于每个节点i ii枚举1 11~i ii中所有字串来统计所需的k i k_iki​。boolable(int32_tf,int32_tt){stackboolss;for(int32_tif;it;i){if(s[i]()ss.push(true);else{if(ss.empty())returnfalse;elsess.pop();}}returnss.empty();}int32_tmain(){// 省略部分代码...int32_tans{};for(int32_ti1;in;i){int32_ttans{};for(int32_tl1;li;l){for(int32_trl;ri;r){if(able(l,r)){tans;}}}ans^(tans*i);}coutans;// 省略部分代码...}55pts解法很容易发现我们重复处理了部分子串那我们就要考虑使用其他线性的办法重新实现。我们规定d p i dp_idpi​为以第i ii个字符结尾的字串中的括号串那么就有k i Σ d p i k_i \Sigma dp_iki​Σdpi​。对于每一个新的括号对我们令p o s t postpost为括号对开始的下标。新括号对自己是合法括号对再加上之前的那么就有d p i d p p o s t − 1 1 dp_i dp_{post-1}1dpi​dppost−1​1最后就能求出对应i ii的k i k_iki​了。stackint64_tst;for(int64_ti1;in;i){if(s[i](){st.push(i);}else{if(!st.empty()){int64_tpostst.top();st.pop();dp[i]dp[post-1]1;}}}for(int64_ti1;in;i){sumdp[i];ans^(sum*i);}coutans;记得使用int64_t。70pts解法其他测试点没有特殊性质说明我们必须按序遍历整棵树所以选择dfs。测试点8~10中有n ≤ 2000 n\leq2000n≤2000完全足够我们枚举所有子串来计算。boolable(int32_tf,int32_tt){stackboolss;for(int32_tif;it;i){if(str[i]()ss.push(true);else{if(ss.empty())returnfalse;elsess.pop();}}returnss.empty();}voiddfs(int32_tn){str.push_back(s[n]);sum0;for(int32_tl1;lint32_t(str.size());l){for(int32_trl;rint32_t(str.size());r){if(able(l-1,r-1)){sum;}}}ans^(sum*n);for(constautoi:son[n]){dfs(i);}str.pop_back();}100pts到这里我们已经快结束了。只需要把上面实现的dp套用在dfs上只要在退出节点时恢复栈即可。voiddfs(int64_tn,int64_tacc){str.push_back(s[n]);sum0;int64_tpost;if(s[n](){st.push(n);}else{if(!st.empty()){postst.top();st.pop();dp[n]dp[f[post]]1;}else{post-1;}}ans^((accdp[n])*n);for(constautoi:son[n]){dfs(i,accdp[n]);}str.pop_back();if(s[n](){st.pop();}else{if(post!-1){st.push(post);}}}P7073 [CSP-J 2020] 表达式题干链接50pts解法30%的数据中n , q ≤ 1000 n, q\leq1000n,q≤1000完全支撑我们进行在线的计算。另外20%的数据中表达式仅含与或者或运算只要对初值进行简单的标记处理即可得到。100pts解法不难发现在线计算可能导致重复计算了多个相同节点结合该题目中计算结果仅为1或者0考虑分析变量值对结果的影响性。显然我们有∀ x .0 ∧ x 0 , 1 ∨ x 1 \forall x. 0 \wedge x 0, 1 \vee x 1∀x.0∧x0,1∨x1那么先尝试以初值计算表达式结果然后分析每个与和或节点。对于与节点若某方计算得0那么将“无影响”下放到另一方下所有变量节点或节点同理。那么询问时若有要取反的变量“无影响”那么直接输出之前计算的结果。否则就是对结果有影响取反输出即可。structnode{int32_tkind;// 0: id, 1: neg. 2: conj, 3: disjint32_tid;shared_ptrnodeleft,right;booluseless{false};boolval{false};node(int32_tkind,int32_tid,shared_ptrnodeleftnullptr,shared_ptrnoderightnullptr):kind(kind),id(id),left(left),right(right){}};stacknodees;string src;stringstream ss;string tok;int32_tn;arraybool,100005init,ul;int32_tq;int32_tqi;voidprint(shared_ptrnodep){switch(p-kind){case0:{coutxp-id;break;}case1:{cout!(;print(p-left);cout);break;}case2:{cout(;print(p-left);cout)(;print(p-right);cout);break;}case3:{cout(;print(p-left);cout)|(;print(p-right);cout);break;}}}voideval(shared_ptrnodep){switch(p-kind){case0:{p-valinit[p-id];break;}case1:{eval(p-left);p-val!p-left-val;break;}case2:{eval(p-left);eval(p-right);p-valp-left-valp-right-val;break;}case3:{eval(p-left);eval(p-right);p-valp-left-val||p-right-val;break;}}}voiduseless(shared_ptrnodep){if(p-useless)return;switch(p-kind){case0:{ul[p-id]true;break;}case1:{p-uselesstrue;useless(p-left);break;}case2:{p-uselesstrue;useless(p-left);useless(p-right);break;}case3:{p-uselesstrue;useless(p-left);useless(p-right);break;}}}voidopt(shared_ptrnodep){switch(p-kind){case0:{break;}case1:{opt(p-left);break;}case2:{opt(p-left);opt(p-right);if(!p-left-val)useless(p-right);if(!p-right-val)useless(p-left);break;}case3:{opt(p-left);opt(p-right);if(p-left-val)useless(p-right);if(p-right-val)useless(p-left);break;}}}int32_tmain(){ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);getline(cin,src);sssrc;while(sstok){if(tok[0]x){es.emplace(0,stoi(tok.substr(1,tok.size()-1)));}if(tok[0]!){autoleftstd::make_sharednode(es.top());es.pop();es.emplace(1,-1,left);}if(tok[0]){autoleftstd::make_sharednode(es.top());es.pop();autorightstd::make_sharednode(es.top());es.pop();es.emplace(2,-1,left,right);}if(tok[0]|){autoleftstd::make_sharednode(es.top());es.pop();autorightstd::make_sharednode(es.top());es.pop();es.emplace(3,-1,left,right);}}cinn;for(int32_ti1;in;i){cininit[i];}autoastmake_sharednode(es.top());eval(ast);opt(ast);cinq;for(int32_ti1;iq;i){cinqi;if(ul[qi]){coutast-val;}else{cout!ast-val;}cout\n;}return0;}

相关新闻

5MB超轻量级中文黑体:WenQuanYi Micro Hei 实战应用指南

5MB超轻量级中文黑体:WenQuanYi Micro Hei 实战应用指南

5MB超轻量级中文黑体:WenQuanYi Micro Hei 实战应用指南 【免费下载链接】fonts-wqy-microhei Debian package for WenQuanYi Micro Hei (mirror of https://anonscm.debian.org/git/pkg-fonts/fonts-wqy-microhei.git) 项目地址: https://gitcode.com/gh_mirrors…

2026/10/7 21:58:09 阅读更多 →
和理论对着干?高速印制电路板PCB线宽不同居然会影响走线延时

和理论对着干?高速印制电路板PCB线宽不同居然会影响走线延时

高速先生成员--黄刚考虑到我们高速先生的粉丝还是有相当一部分不做很高速的产品,那今天就不讲高速信号了,甚至这篇文章可以说是和频率没关系,我们来讲讲一个很简单的东东,那就是传输线的延时。此言一出,大家会不会立马…

2026/10/13 23:22:29 阅读更多 →
深入解析Wallpaper Engine资源格式:RePKG源码架构与实现原理

深入解析Wallpaper Engine资源格式:RePKG源码架构与实现原理

深入解析Wallpaper Engine资源格式:RePKG源码架构与实现原理 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg RePKG是一款专为Wallpaper Engine设计的C#开源工具&#xf…

2026/9/28 8:11:43 阅读更多 →

最新新闻

本地AI自迭代实战:元提示工程与轻量微调闭环

本地AI自迭代实战:元提示工程与轻量微调闭环

1. 这不是科幻预告片,而是我上周调试的本地实验环境“当AI开始造AI”这个标题一出来,很多人第一反应是科幻电影开场——镜头缓缓推进某个泛着蓝光的量子服务器阵列,AI在虚拟空间里拆解自己、重写权重、生成更优的子模型……但实话讲&#xff…

2026/10/15 22:33:56 阅读更多 →
2025上半年阅读复盘:选书逻辑、时间窗口与卡片笔记的实测方法

2025上半年阅读复盘:选书逻辑、时间窗口与卡片笔记的实测方法

六月底整理床头那摞书时,我忽然意识到该给2025年上半年读书回顾留点记录了。倒不是这半年读了多少吓人的数字,而是我的阅读习惯悄悄变了不少,想趁记忆还热的时候把它们写下来。如果你也在为这几件事烦——总说没时间读书、挑书全凭运气、读完…

2026/10/15 22:33:56 阅读更多 →
INA226高精度电流检测实战:校准、布局与配置避坑指南

INA226高精度电流检测实战:校准、布局与配置避坑指南

简介:本资源为INA226高精度电流电压测量芯片的中文手册自译版,面向嵌入式硬件工程师、电源管理系统开发者及电子类专业学生,解决原厂英文文档阅读门槛高、关键参数理解困难、IC配置与寄存器应用无中文参考等实际问题。手册完整覆盖器件特性&a…

2026/10/15 22:33:56 阅读更多 →
Hermes 搭建 Karpathy LLM Wiki:进阶版 TaoToken 统一 Key 接入实践

Hermes 搭建 Karpathy LLM Wiki:进阶版 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/15 22:33:56 阅读更多 →
基于STM32的天气时钟复现指南:ST7735 SPI驱动与AT指令联网实战

基于STM32的天气时钟复现指南:ST7735 SPI驱动与AT指令联网实战

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

2026/10/15 22:33:56 阅读更多 →
直流偏磁下变压器励磁电流谐波分析与Simulink仿真

直流偏磁下变压器励磁电流谐波分析与Simulink仿真

简介:一份基于复杂电力系统设计(复杂电气工程系统设计)课程的A等实验报告,面向电气工程及其自动化专业学生,聚焦直流偏磁下变压器励磁电流的谐波特性分析。报告从地磁风暴和高压直流输电两类工程背景切入,说…

2026/10/15 22:32:56 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →