首页 > 其他分享 >Exam Records 6

Exam Records 6

时间:2024-11-03 21:41:45浏览次数:1  
标签:le const Exam int Records 权值 mod 2k

10.31

多校 NOIP2024 模拟赛 16

D

逆序图

题目描述

“真开心呢,凤同学。”——Asahina Mafuyu。
给出一个长度为 \(n\) 的排列 \(P\) 和一个定义在集合 \(\{1, 2, 3,\cdots, n − 1\}\) 上的函数 \(f\) ,我们称该排列“生成”的图为这样的一张图 \(G\):

  1. \(G\) 具有编号为 \(1\) 到 \(n\) 的 \(n\) 个顶点。
  2. 如果 \(i < j\) 且 \(P_i > P_j\) (即 \((i, j)\) 为一个逆序对),那么在 \(G\) 中存在一条无向边 \((i, j)\)。

在此基础上,如果 \(D\) 是长度为正偶数的顶点序列 \(\{D_1 , D_2 , \cdots D_{2m-1} , D_{2m} \}\),其中 \(m\) 是任意的正整数,并且满足以下性质:

  1. \(\forall 1 \le k < 2m\),\(D_k < D_{k+1}\)。
  2. \(\forall 1 \le k \le m\),存在一条无向边 \((D_{2k-1}, D_{2k})\)。
  3. \(\forall 1 \le j, k \le m\),\(j \neq k\),图中不存在一条起点是 \(D_{2j}\),终点是 \(D_{2k}\) 的简单路径。
    (即选择若干条顶点编号递增的边,并且任意两条边不在同一个连通块中)

则我们称序列 \(D\) 是“开心”的,记该序列的权值为 \(\prod _{k=1}^m f (P_{D_{2k-1}} - P_{D_{ 2k}})\)。

定义一个排列的权值为所有“开心”的序列 \(D\) 的权值之和,即

\[\sum_{D \texttt{ is happy}} \prod_{k=1}^{\frac {\lvert D \rvert} 2} f(P_{D_{2k-1}} - P_{D_{2k}}) \]

现在,你需要求出所有排列的权值之和对 \(998244353\) 取模的结果。

\(1 \le n \le 5000\),\(1 \le f(i) \le 10^9\)。

排列图的连通块是一个区间。

对于每一个连通块求出答案。设 \(g_i\) 表示假设 \(1 \sim i\) 中的所有排列都是一个连通块的权值和。\(f_i\) 表示 \(1 \sim i\) 的排列是一个连通块的权值和。

然后对于每个连通块,可以跳过,可以经过,可以从它开始。

代码
#include <cstdio>
#include <algorithm>

#define int long long

using namespace std;

const int N = 5005;
const int mod = 998244353;
const int inv = mod + 1 >> 1;

int n, a[N], F[N], fac[N], f[N][2], g[N][2];

// f[i][0], g[i][0] 表示方案数,f[i][1], g[i][1] 表示权值和。

signed main()
{
    freopen("graph.in", "r", stdin);
    freopen("graph.out", "w", stdout);

    scanf("%lld", &n);
    for(int i = 1; i < n; ++ i)
        scanf("%lld", &a[i]);

    fac[0] = 1;
    for(int i = 1; i <= n; ++ i)
        fac[i] = fac[i - 1] * i % mod;

    g[0][0] = 1;
    for(int i = 1; i <= n; ++ i)
        g[i][0] = g[i - 1][0] * i % mod;
    for(int i = 2; i <= n; ++ i)
        for(int j = 1; j < i; ++ j)
            g[i][1] = (g[i][1] + a[j] * (i - j) % mod * fac[i - 2] % mod * i % mod * (i - 1) % mod * inv) % mod;
    
    f[1][0] = 1;
    for(int i = 2; i <= n; ++ i)
    {
        f[i][0] = g[i][0], f[i][1] = g[i][1];
        for(int j = 1; j < i; ++ j)
        {
            f[i][0] = (f[i][0] - g[j][0] * f[i - j][0]) % mod;
            f[i][1] = (f[i][1] - g[j][0] * f[i - j][1] - g[j][1] * f[i - j][0]) % mod;
        }
    }

    for(int i = 1; i <= n; ++ i)
        for(int j = 0; j < i; ++ j)
            F[i] = (F[i] + F[j] * f[i - j][1] + F[j] * f[i - j][0] + g[j][0] * f[i - j][1]) % mod;

    printf("%lld\n", (F[n] + mod) % mod);

    return 0;
}

11.1

多校 NOIP2024 模拟赛 17

C

集合

题目描述

彩梦喜欢一个集合 \(S\),当且仅当存在另一个集合 \(T\) ,使得 \((S, T)\) 满足以下条件:

  • \(\lvert S \rvert = n, \lvert T \rvert = m, 1 \in S\)。
  • \(S \subseteq [1, nm] \cap \Z, T \subseteq \Z\)。
  • \(\{i + j \mid i \in S, j \in T \} = \{1, 2, \cdots , nm\}\)。

给定 \(n, m\),求彩梦喜欢的集合数量对质数 \(998244353\) 取模的值。
为了方便选手,\(n\) 和 \(m\) 都使用唯一分解形式给出。

给定的 \(n, m\) 分别为 \(\prod p_i^{x_i}\) 和 \(\prod p_i^{y_i}\)。

\(0 \le \sum_{x_i},\sum_{y_i} \le 2\times 10^5\)。

代码
#include <cstdio>
#include <cassert>
#include <algorithm>

#define int long long

using namespace std;

const int N = 600005;
const int mod = 998244353;

int n = 600000, m, ans, lim, l, I, rev[N], a[N], b[N], f[N], g[N], h[N], fac[N], ifa[N];

int Pow(int x, int y)
{
    int r = 1;
    for(; y; y >>= 1, x = x * x % mod)
        if(y & 1)
            r = r * x % mod;
    return r;
}

void init(int n)
{
    for(l = 0, lim = 1; lim < n; lim <<= 1, ++ l);
    I = Pow(lim, mod - 2);
    for(int i = 0; i < lim; ++ i)
        rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << l - 1);
}

void NTT(int *a, int type)
{
    for(int i = 0; i < lim; ++ i)
        if(i < rev[i])
            swap(a[i], a[rev[i]]);
    for(int i = 1; i < lim; i <<= 1)
    {
        int x = Pow(type ? 3 : (mod + 1) / 3, (mod - 1) / (i << 1));
        for(int j = 0; j < lim; j += (i << 1))
        {
            for(int k = 0, y = 1; k < i; ++ k, y = y * x % mod)
            {
                int p = a[j + k], q = y * a[i + j + k] % mod;
                a[j + k] = (p + q) % mod;
                a[i + j + k] = (p - q) % mod;
            }
        }
    }
    if(!type)
        for(int i = 0; i < lim; ++ i)
            a[i] = a[i] * I % mod;
}

int C(int n, int m)
{
    return fac[n] * ifa[m] % mod * ifa[n - m] % mod;
}

signed main()
{
    freopen("set.in", "r", stdin);
    freopen("set.out", "w", stdout);

    fac[0] = ifa[0] = 1;
    for(int i = 1; i <= n; ++ i)
        fac[i] = fac[i - 1] * i % mod;
    ifa[n] = Pow(fac[n], mod - 2);
    for(int i = n - 1; i >= 0; -- i)
        ifa[i] = ifa[i + 1] * (i + 1) % mod;

    scanf("%lld", &m);
    for(int i = 1, x, u, v; i <= m; ++ i)
        scanf("%lld%lld%lld", &x, &u, &v), ++ a[u], ++ b[v];

    for(int i = 1; i <= 2e5; ++ i)
        f[i] = g[i] = 1;
    for(int i = 1; i <= 2e5; ++ i)
        if(a[i])
            for(int j = 1; j <= 2e5; ++ j)
                f[j] = f[j] * Pow(C(i + j - 1, j - 1), a[i]) % mod;
    for(int i = 1; i <= 2e5; ++ i)
        if(b[i])
            for(int j = 1; j <= 2e5; ++ j)
                g[j] = g[j] * Pow(C(i + j - 1, j - 1), b[i]) % mod;

    for(int i = 0; i <= 2e5; ++ i)
    {
        f[i] = f[i] * ifa[i] % mod;
        g[i] = g[i] * ifa[i] % mod;
        h[i] = ifa[i] * (i & 1 ? -1 : 1) % mod;
    }

    init(4e5 + 1);
    NTT(f, 1);
    NTT(g, 1);
    NTT(h, 1);
    
    for(int i = 0; i < lim; ++ i)
    {
        f[i] = f[i] * h[i] % mod;
        g[i] = g[i] * h[i] % mod;
    }

    NTT(f, 0);
    NTT(g, 0);

    for(int i = 0; i < lim; ++ i)
    {
        f[i] = f[i] * fac[i] % mod;
        g[i] = g[i] * fac[i] % mod;
    }

    for(int i = 1; i <= 2e5; ++ i)
    {
        ans = (ans + 2 * f[i] * g[i]) % mod;
        if(i)
            ans = (ans + f[i] * g[i - 1]) % mod;
        if(i != 2e5)
            ans = (ans + f[i] * g[i + 1]) % mod;
    }

    printf("%lld\n", (ans + mod) % mod);

    return 0;
}

标签:le,const,Exam,int,Records,权值,mod,2k
From: https://www.cnblogs.com/Estelle-N/p/18524066

相关文章

  • Get “https://registry-1.docker.io/v2/“: proxyconnect tcp: dial tcp: lookup pro
    docker通过代理配置上网无法pullanbox使用代理配置文件解决1.创建代理配置文件运行以下命令创建配置文件:sudomkdir-p/etc/systemd/system/docker.service.dsudotouch/etc/systemd/system/docker.service.d/http-proxy.conf2.编辑配置文件使用nano文本编辑器打......
  • 高效备考利器——Examful.ai:AP、IB、A-Level学生的智能助手
    摘要:Examful.ai是一个免费的在线学习平台,专注于为准备AP、IB和A-Level考试的学生提供海量真题和AI智能辅导服务。无论是需要巩固知识点还是解决疑难问题,Examful.ai的AI助手都能在24/7随时提供详细解答,极大提升备考效率。作为AP、IB或A-Level的学生,备考的压力与挑战不言而喻。在......
  • python实现主动学习【一】modAL example active_regression
    文章目录一、简要介绍二、代码运行2.1前期准备2.1.1关于sklearn.gaussian_process.kernels的小展开1.RBFKernel(RadialBasisFunction)2.WhiteKernel3.组合内核的原理4.在主动学习中的优势5.其他核函数的特点6.如何组合使用不同的核2.1.2关于ActiveLearner......
  • Training Records 2
    9.6CSP1*Blink题目描述小诗有一个不可重集\(S\),她记得\(S\)的元素数量\(n\)与\(\gcd⁡(S)+\operatorname{lcm}⁡(S)\)的值\(m\),但她已经忘记\(S\)由什么元素构成,她想知道有多少种符合条件的构成方案。由于答案过大,你只需告诉她答案\(\bmodP\)的值。对于......
  • Training Records 3
    9.30CSP7Alink题目描述给定\(5\)个长度为\(n\)的整数序列\(A,B,C,D,E\),求\[\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^n\sum_{l=1}^l\sum_{m=1}^nmed(A_i,B_j,C_k,D_l,E_m)\mod998244353\]其中,\(med(a,b,c,d,e)\)为\(a,b,c,d,e\)的中位数。枚举中位数,计算即可......
  • Example of API call
    指导API仪表板市场价格地图我们的倡议合作伙伴的优惠博客对于企业苹果笔记本支持 一键调用API3.0家API一键调用API3.0×OpenWeather气象服务与首席气象学家丹·哈特和他的团队交谈!产品概念如何开始当前和......
  • Example of Monthly Wrapped Username and Password
    AssignmentPartBAssignmentPartBAssignmentOverview:AssignmentstaskyouwithapplyingtheskillsandknowledgeyouhavelearntthroughtheEdLessons.TheyarenomoredifficultthantheexercisesinyourEdLessons.Youmustmeetallcompetencyrequi......
  • SciTech-Mathmatics-Probability+Statistics-数学专业社区(math.stackexchange.com/qu
    SamplingDistributionCouldsomegiveanexamplesof"asetofdistributionsindexedbyaparameter"?Q:Couldsomegiveanexamplesof"asetofdistributionsindexedbyaparameter"?Thispostsays:Thelog-likelihoodis,astheter......
  • crewAI-examples
    crewAI-exampleshttps://github.com/crewAIInc/crewAI-examples/tree/mainhttps://docs.crewai.com/getting-started/Start-a-New-CrewAI-Project-Template-Method/#annotations-include markdown_validatorhttps://github.com/fanqingsong/crewAI-examples/tree/main/m......
  • 《开源大模型食用指南》,一杯奶茶速通大模型!新增Examples最佳实践!
    01「Example系列的前世今生」我们希望成为LLM与普罗大众的阶梯,以自由、平等的开源精神,拥抱更恢弘而辽阔的LLM世界。Self-llm开源项目是一个围绕开源大模型、针对国内初学者、适合中国宝宝的专属大模型教程,针对各类开源大模型提供包括环境配置、本地部署、高效微调......