洛谷 P5698 [CTSC1998]算法复杂度 题解
前言
咕了大半年,我回来了
说实话当鸽子的感觉挺不错???
题意
给定一个伪代码,判断他总共需要进行几次操作,用多项式形式输出。
题解
首先,这是一道模拟题,发现性质的话比较水
输入及处理
对于 loop 和 op
我们能够很容易的发现,对于任意的 loop 操作,与他有关的是在它上几层的 loop 以及在它下几层的 loop 和 op,简单来说,整个伪代码可以看做一个一 begin 为根树形结构(暂时忽略 break 和 continue),以样例二为例,就像下图(忽略 break 和 continue)
如此一来,我们只需要在读入时进行树形存储,最后扫描统计贡献就行
对于 break 和 continue
我们回忆一下 break 和 continue 的功能
- break :结束本层循环
- continue : 结束本次循环
很容易发现他们之间有几个共性
都只与本层循环有关,都改变了循环操作的对象,本层循环的剩余部分都
变成了废话不会执行
那么对于 break 和 continue 操作,只需要忽略本层循环的剩余部分,对于 break , 再将循环次数改为1,就完成了对这两个操作的处理。用图表示就像下图(红色部分为发生变化的部分)
最终结构如下
因为题目没说总共有多少个 loop 和 op 操作,所以存数据时最好用 vector 加 指针 的方式存储,如下
点击查看代码
细心的大佬看官可以发现,loop 和 op 以及 break 和 continue 的处理极其相似,这也是我将他们放到一起分析的原因
统计
因为之前已经存好了树形结构,统计的时候只需要递归进行,传递系数和指数即可
点击查看代码
点击查看代码
输出
从高到低输出即可,注意判系数为1及指数为1或0的情况
就下来是喜闻乐见的
全部代码
点击查看代码
P.S.
数据里有一个小锅,没注意会WA一个点,那就请各位看官自行去找喽~~
__EOF__
本文作者:Nebula
本文链接:https://www.cnblogs.com/Nebula-Astraea/p/16767326.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/Nebula-Astraea/p/16767326.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】