zoukankan      html  css  js  c++  java
  • 模拟7

    T1

    一眼看上去不可做的样子,于是考虑暴力一点的写法,先想(a_ileq300)的,可以开个桶,然后每次查询要找的数存不存在,正解可以对这个进行优化,仍旧是检查要找的数存不存在,但是由于值域比较大所以要分开找,那么假设模数为(mod),可以将值域分为([k mod,(k+1)mod )),于是每段里边查询((k+1)mod)的前驱即可。

    前驱可以被预处理出来,即对整个序列分块,然后大块直接查,小块暴力。设块大小为(q)值域为(V),那么时间复杂度为(n/qVlnV+m(q+n/q)),所以(q)应该取(sqrt{nlnn})

    T2

    直接对(y)排序进行(dp),看起来会好点,但是发现转移过程中的数组大小太大,开不下。。。。不过貌似可以拍成一维的卡过去,开到(5000)可以拿一半的分,但是还可以再开大点,如果开到最大也就是(5800)左右,就有(80),所以还是能开多大开多大。。

    正解是对(x)从小到大排序,然后类似于记个数,不是(dp)因为会修改之前的状态,然后新加的这个点一定是第一个点或者是第二个点

    证明:假设它不是前两个,那么一定存在一个数比它大,不满足当前数是最大的。

    于是就考虑它是第一个还是第二个,然后(f[x][0/1])表示是向左偏还是向右偏,注意将第二次循环倒序即可做到(N^2)

    T3

    可以将序列看成(n)个白球,每种颜色(k-1)个球,然后就往上放就行了,注意要把让数列有唯一的生成方式,即计数的时候不要算重了,可以这样做,规定放白球的时候必须放在当前第一个空位,色球必须放在白球后的第一个空位,每次放球一次性放完,最后如果放了(i)个白球,(j-1)个色球,那颜色有(n-j+1)种选择,从(nk-i-(j-1)(k-1)-1)中挑(k-2)个就完了。

    int - > long long 0 - > 100
  • 相关阅读:
    mysql中删除表
    js上传文件获取客户端地址
    form表单普通提交预览显示,读取显示tmp文件
    PHP中获取中英文混合字符串长度[主要是指个数,而不是字符串长度](转)
    离开页面提醒功能 (实现博客园离开编辑页面时的提醒功能)(转)
    Google maps API开发(一)(转)
    Python的getattr(),setattr(),delattr(),hasattr()
    Python读写文件
    Python命令行解析argparse常用语法使用简介
    面向对象设计与分析实例
  • 原文地址:https://www.cnblogs.com/anyixing-fly/p/13767385.html
Copyright © 2011-2022 走看看