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
  • 相关阅读:
    spyder学习记录---如何调试
    Pycharm学习记录---同一目录下无法import明明已经存在的.py文件
    python库之matplotlib学习---图无法显示中文
    python之字典遍历方法
    python库之matplotlib学习---关于坐标轴
    将博客搬至CSDN
    C代码实现栈
    Android进程间通讯
    Android进程间通讯之messenger
    C代码实现非循环单链表
  • 原文地址:https://www.cnblogs.com/anyixing-fly/p/13767385.html
Copyright © 2011-2022 走看看