zoukankan      html  css  js  c++  java
  • NOI导刊2009 提高一


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

    LocalMaxima

    题目解析

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

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

    [r = lim_{n ightarrow infty} ^ {} left ( left ( sum_{i=1}^n frac{1}{i} ight ) - ln(n) ight ) = int_1^{infty} left ( frac{1}{[x]} - frac{1}{x} ight ) dx ]

    最长括号匹配

    题目解析

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

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

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

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

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

    Magicfingerprint

    题目分析

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

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

  • 相关阅读:
    花生壳 manjaro 安装
    manjaro+apache+django+mod_wsgi 安装
    arch linux或 Manjaro下安装 微信 wechat deepin-wine-wechat
    BBU+RRU基本介绍
    黑马python01——基础
    NNLearning阶段性总结01
    【信息论】——第二讲
    10.09——今日文章收集
    pygame安装【在pycharm的IDE project下】
    Git笔记——01
  • 原文地址:https://www.cnblogs.com/Alessandro/p/9608045.html
Copyright © 2011-2022 走看看