NOI导刊2009 提高一


zzh大佬给我说导刊的题全是普及难度,然而我。。觉得有两道题是提高的

LocalMaxima

题目解析#

对于i这个数,它要想成为LocalMaxima,比它大的要全部放到最后去,比它小的想怎么放就怎么放。所以说,这个数能成为LocalMaxima的期望就是(ni)!/(ni+1)!=1ni+1, 那么总的期望就是i=1n1ni+1=i=1n1i, 于是我们就有了线性的做法,但是这显然是不合乎要求的。

我们知道, i=1n1i这样的一个调和级数是发散的,不存在极限,但是欧拉曾经证明i=1n1iln(n)是收敛的。它的极限是存在的。设这个极限是rr被称作欧拉常数。它的近似值约0.57721566490,于是我们有了一个求解s的算法,那就是s=ln(n+1)+r

r=limn((i=1n1i)ln(n))=1(1[x]1x)dx

最长括号匹配

题目解析#

首先我们考虑一下如何判断一个串是不是合法串。

我们只需要抽离一个经典的栈的模型,用左括号压栈,右括号弹栈,只有一个合法的压栈,弹栈序列才是合法的括号串。因为这里有两种括号,因此我们还需要增加一个匹配的条件。

假设我们用str[0...L1]储存括号序列,stack模拟栈,stack[i]记录第i层栈储存的元素在str中的下表,top标记栈顶。

几个比较显然的性质:假设在[L,R]中出现了非法弹栈,那么对于任意区间LaR,则区间[a,b]必然是非法的,因为弹栈和压栈操作相互独立。
于是不难得出下面的模拟算法:

对于括号str[i]对应的操作,如果是压栈,则压栈,若果是合法弹栈,就弹栈,并且更新答案。如果是非法弹栈,就立刻清空栈。最终输出答案。

Magicfingerprint

题目分析#

我们有个很显然的打表算法,由于可以估算出这个序列应该比较分散,所以对于30pts,100kb之内是没有问题的。

我们有一个很显然的反向dfs方法,不停添加位数,然后sort一下, On查询一下就行了

posted @   AlessandroChen  阅读(464)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示
CONTENTS