• 20211114 补题


    再次Orz ljs神,又赛场A掉大家都不会的题目。

    T1 & T2 & T3

    都太蠢了,T1 sb dp,T2 sb 模拟,T3 明明可以 \(\Theta(n\times m)\),出题人却只开到 \(4\times 10^4\)

    T4

    Description

    \(n!\) 在除去所有 \(2^4\) 之后 ull 意义下的值。

    \(n< 2^{64}\)

    Solution

    funny problem

    我们首先看出我们可以分治,就是说我们可以设 \(f(n)\) 表示 \(\prod_{i=1}^{n} i!\) 在去掉 \(2\) 之后的 ull 下的值,最后我们再乘上 \(2^{c\pmod 4}\),其中 \(c\) 就是 \(n!\)\(2\) 的个数。

    考虑 \(f(n)\) 怎么算。我们发现我们可以奇偶分类,那么我们就有 \(f(n)=f(n/2)\prod_{i=0}^{n/2-1} (2i+1)\)

    我们考虑展开后面那个,你发现我们最多选 \(63\)\(2i\) ,因为多了就不会产生贡献了。而我们选一个 \(2i\) 相当于我们贡献乘上 \(i\)(去掉因子 \(2\))。

    那我们设 \(g_{i,j}\) 表示前面 \(i\) 个数中选 \(j\) 出来的贡献之和。我们就可以得到转移式:

    \[g_{i,j}=g_{i-1,j}+g_{i-1,j-1}\times i \]

    观察第一类斯特林数的式子:

    \[S(n,k)=S(n-1,k-1)+S(n-1,k)\times (n-1) \]

    那么,你就可以发现,\(g_{n,m}=S(n+1,n-m+1)\)

    但是这个题目 \(n\) 太大了,不好直接算,所以我们需要考虑跟 \(m\) 相关的算法。我们发现大于 \(1\) 的环最多只有 \(m\) 个,那么我们设 \(f_{i,j}\) 表示 \(i+j\) 个点,放进 \(j\) 大小 \(>1\) 的个圆的排列方案数。

    那么答案就是:

    \[\sum_{i=1}^{m} f_{m,i}\binom{n+1}{m+i} \]

    你考虑 \(f_{i,j}\) 怎么算。对于第 \(i\) 个点,你可以加入前面的任意一个环,贡献为 \(i+j-1\),你也可以新开一个大小为 \(2\) 的环,同时你需要从前面选一个来组队,贡献亦为 \(i+j-1\),所以我们得到转移式:

    \[f_{i,j}=(f_{i-1,j}+f_{i-1,j-1})\times (i+j-1) \]

    复杂度大概是 \(\Theta(\log^4 n)\)

    Code

    并没有呢,先生。

  • 相关阅读:
    AT2667-[AGC017D]Game on Tree【SG函数】
    P5163-WD与地图【tarjan,整体二分,线段树合并】
    P4258-[WC2016]挑战NPC【带花树】
    P7099-[yLOI2020]灼【数学期望,结论】
    P5056-[模板]插头dp
    P2012-拯救世界2【EGF】
    [CSP校内集训]替换游戏(tarjan+离散化)
    4.24作业
    【题解】考分鄙视
    【题解】鱼塘钓鱼
  • 原文地址:https://www.cnblogs.com/Dark-Romance/p/15555006.html
Copyright © 2020-2023  润新知