zoukankan      html  css  js  c++  java
  • 最近发现的一些trick(naive) & 学车膜你赛题解

    最近发现的一些trick(naive) & 学车膜你赛题解

    大鸽子更博了!

    ARC093F Dark Horse

    (2^n) 个人,每次相邻比试,比试到只剩一人。(x<y)(x) 获胜。(1) 选手想获胜,但它会输给其中 (m) 个选手。求初始序列的方案数。

    (n,mle 16)

    一道状压 (dp) + 容斥原理的好题。

    (居然是自己想出来的)

    (f_{i,j}) 表示给定选手 (isim m) 决定是否强制为集合的最小值时,集合大小 (2^0,2^1,...,2^{n-1}) 选择的情况。

    [f_{i,j} imes {2^n-a_{i-1}-j choose 2^k-1} imes k! ightarrow f_{i-1,j|2^k}[j&2^k=0] ]

    [ans=2^n imes sum_S(-1)^{|S|}(2^n-1-S)! imes f_{1,S} ]

    小 trick: 计数中对组合意义的转化

    有些题目在模很小的质数,如 (2) 时,挖掘特殊性质

    给定一个无向连通图 (G),问其诱导子图连通的方案数,对 (2) 取模。

    (nle 50,1le |a-b|le 12)

    注意到一个图,有 (k) 个连通块,那么它黑白染色的方案数为 (2^k)

    我们先求子图黑白染色的方案数,因为连通块 (ge 2) 时须忽略,故对 (4) 取模除二即为答案。

    状态就很简单了:黑色,白色,不选。时间 (O(n3^{12}))。其实 (n^23^{12}) 也跑得过去。。。

    对于 (prod_{i=1}^k a_i) 时组合意义的转化

    相当于在 (k) 个集合中,每个集合大小为 (a_i),各选一个的方案数。

    比如 神佬来切切吧

    ( ext{WC2019}) 数树更是结合了 ( ext{prufer}) 序列的推论:(k) 个连通块,(sum_{i=1}^{k}a_i=n),方案数为 (n^{k-2}prod_{i=1}^{k}a_i)

    真是一道不可多得的好题!


    突然发现学车送了三套题,质量还可以。其中一套没 latex 所以没做。

    prime

    min25 筛模板,随便做。

    tree

    这么好的题目居然没人做 QAQ

    (sum_{yin S}dis(x,y)),先建个虚树,在虚树上换根 dp,处理出每个点子树和子树反树的 (sum dis^2,sum dis,sum 1),这样就可以合并了。

    因为 (z>0),所以答案点一定在虚树一条链上。我们设 ((a,b,c)_{1,2}) 分别为子树和子树反树的 (sum dis^2,sum dis,sum 1)

    [ans=a_1+2b_1x+c_1x^2+a_2+2b_2(v-x)+c_2(v-x)^2 ]

    [ans=a_1+a_2+2b_2v+c_2v^2+(2b_1-2b_2-2vc_2)x+(c_1+c_2)x^2 ]

    根据初中数学知识,(x) 越接近 (-frac {b}{2a}) 二次函数越小,这样的话我们倍增上去,找到一个点,恰好使得 (dis_{x ightarrow z}le Largefrac {vc_2+b_2-b_1}{c_1+c_2}),这样计算一下 (z)(fa_z) 的答案就行了。

    另外就是,倍增上去的时候,若 (-frac {b}{2a}) 下取整 (=0) 也是在范围内的。因为有可能是 (-frac {b}{2a}=0.80),答案在 (fa_x)。若不在 ([0,v)) 的范围内,最小的答案肯定在虚树上的点。

    时间 (O(sum klog n)),我认为这是道好题。

    triangle

    我们把所有点和直线的交点拿去离散化,跑扫描线。这样区域就变成了一些梯形和三角形,且过一个区域的直线不相交。因为若相交,扫描线时会分成两个区域。

    这样子你把直线拿去离散化,有两条直线的话相当于在上面区间加,单点查。若一块区域被覆盖 (k) 次,它的贡献为 (S imes (2^k-1) imes 2^{n-k})。时间 (O(n^3log n))

    inv

    md,随机居然是这么用的,233

    类似 k-d tree 查询最近/远点对,复杂度大概是 (O(nsqrt{a}log n))

    perm

    一眼秒了,只是没看出有更简单的做法。

    (f_i)(i) 个点正好连成大小为 (i) 的环的方案数。长度在集合之内就是把一些数设成 (0),不用管它。答案为 (ans_t=t! imes [x^t]e^f)

    [f_0=0,f_1=1 ]

    [f_i=i!-sum_{j=1}^{i-1}f_j imes {i-1choose j-1} imes (i-j)! ]

    [f_i=i!-(i-1)! imes sum_{j=1}^{i-1}frac{f_j}{(j-1)!} ]

    然后我就直接分治 FFT 了。。。

    一看别人写的,cnm,这么简单。。。有一个结论:(f_i=(i-1)!)。用数学归纳法容易得出。

    接下来就是多项式 exp 的事了,时间 (O(nlog n))

    dlds

    码农题。。。估计考场上我如果能写出这题就 rp 爆表了。。。

    想都不想,直接树套树,动态开点线段树套fhq treap,封装一下。虽然这题不仅卡时间还卡空间,不过 12s 即使操作 5 时间 (O(log^3 n)) 其他操作时间 (O(log^2 n)) 都能过吧。。。快速访问用个 deque,码码码就行了。

  • 相关阅读:
    Nodejs接收图片base64格式保存为文件
    tracking.js实现前端人脸识别
    node.js执行shell命令进行服务器重启
    Cordova 实现沉浸式(透明)状态栏效果
    SpringBoot启动原理详解
    连续子数组的最大乘积及连续子数组的最大和(Java)
    记录面试遇到的几个自己不太熟悉的问题(3)
    记录面试遇到的几个自己不太熟悉的问题(2)
    记录面试遇到的几个自己不太熟悉的问题(1)
    Java设计模式
  • 原文地址:https://www.cnblogs.com/owencodeisking/p/12247013.html
Copyright © 2011-2022 走看看