Blog


赛场上差一点做出来。

首先发现左右两部分是比较独立的,所以可以分开计算后合并。

注意到我们可以把整个数集分成左右两部分,即 \(\binom{n - 1}{p_{m1} - 1}\)。

然后我们不妨只考虑左边。

发现左边的最大值也已经确定,且最大值右边的所有数可以随便选,即 \(\binom{p_{i + 1} - 2}{p_i - 1}\)。

由于内部需要换顺序,所以还要乘上 \((p_{i + 1} - p_i - 1)!\)。

右边同理。最后的答案即为全部的乘积。

/*******************************
| Author: DE_aemmprty
| Problem: E. Girl Permutation
| Contest: Codeforces Round 936 (Div. 2)
| URL: https://codeforces.com/contest/1946/problem/E
| When: 2024-03-22 22:37:51
|
| Memory: 256 MB
| Time: 2000 ms
*******************************/
#include <bits/stdc++.h>
using namespace std; long long read() {
char c = getchar();
long long x = 0, p = 1;
while ((c < '0' || c > '9') && c != '-') c = getchar();
if (c == '-') p = -1, c = getchar();
while (c >= '0' && c <= '9')
x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return x * p;
} const int N = 2e5 + 7;
const long long mod = 1e9 + 7; int n, m1, m2;
int p[N], q[N];
long long fac[N]; long long ksm(long long x, long long y) {
long long res = 1;
for (; y; y >>= 1, (x *= x) %= mod)
if (y & 1)
(res *= x) %= mod;
return res;
} long long C(long long x, long long y) {
if (x < y) return 0;
return fac[x] * ksm(fac[y] * fac[x - y] % mod, mod - 2) % mod;
} void solve() {
n = read(), m1 = read(), m2 = read();
for (int i = 1; i <= m1; i ++) p[i] = read();
for (int i = 1; i <= m2; i ++) q[m2 - i + 1] = n - read() + 1;
if (p[m1] + q[m2] != n + 1 || p[1] != 1 || q[1] != 1) {
cout << 0 << '\n';
return ;
}
long long res = 1ll;
for (int i = 1; i < m1; i ++) {
int siz = p[i + 1] - p[i] - 1;
res = res * fac[siz] % mod * C(p[i + 1] - 2, p[i] - 1) % mod;
}
long long res2 = 1ll;
for (int i = 1; i < m2; i ++) {
int siz = q[i + 1] - q[i] - 1;
res2 = res2 * fac[siz] % mod * C(q[i + 1] - 2, q[i] - 1) % mod;
}
cout << res * res2 % mod * C(n - 1, p[m1] - 1) % mod << '\n';
} signed main() {
int t = 1;
t = read();
fac[0] = 1;
for (int i = 1; i <= 200000; i ++) fac[i] = fac[i - 1] * i % mod;
while (t --) solve();
return 0;
}

CF1946E 题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

  10. JSOI2016R3 瞎BB题解

    题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...

随机推荐

  1. Vue3 学习-初识体验-helloworld

    在数据分析中有一个最重要的一环就是数据可视化, 数据报表的开发. 从我从业这几年的经历上看, 经历了从业务系统导表格数据, 到Excel+PPT, 再是开源报表工具, 再是主流商业BI产品(低/零代码 ...

  2. FastAPI与MongoDB Change Stream的实时数据交响曲

    title: FastAPI与MongoDB Change Stream的实时数据交响曲 date: 2025/05/25 13:04:40 updated: 2025/05/25 13:04:40 ...

  3. Docker和K8S存在的意义

    之前一直没搞明白为什么要用docker和k8s,下面简单说一下: 先说现实中需求: 1.服务器上的环境.数据,有时需要迁移 2.服务器上的资源,需要动态伸缩,比如双十一的时候搞促销,就需要扩容更多的服 ...

  4. 在Matlab中如何计算决定系数R^2和相关系数r

    Problem 当你使用 polyfit 函数进行多项式拟合之后,你希望计算决定系数或者相关系数看看拟合效果如何.聪明的你肯定觉得聪明的 Matlab 的 polyfit 函数的返回值中会有 \(R^ ...

  5. CSharp中的文件操作

    在C#中,可以使用System.IO命名空间中的类来进行Windows文件操作.这些类提供了丰富的方法来处理文件和目录,包括创建.复制.删除.移动文件和目录,以及读取和写入文件等功能. 常用文件操作方 ...

  6. Informer架构以及简单使用

    Informer架构以及简单使用 介绍 我们知道可以使用 Clientset 来获取所有的原生资源对象,那么如果我们想要去一直获取集群的资源对象数据呢?岂不是需要用一个轮询去不断执行 List() 操 ...

  7. Go mod/work/get ... Golang 提供的项目管理工具该怎么用?

    自 Go 1.11 版本引入 模块(modules) 的概念以来,Go 语言的项目管理和依赖管理方式发生了根本性的变革.这一变化旨在解决早期 GOPATH 模式带来的种种不便,让项目结构更加清晰,依赖 ...

  8. 上班第一天安装idea

    分享一波 IDEA 2023.2.5 版本的激活码,需搭配破解补丁一起使用,永久有效,亲测好用(前面步骤差不多,主要看后面)~ 申明:本教程 IntelliJ IDEA 破解补丁.激活码均收集于网络, ...

  9. DRF之排序类源码分析

    DRF之排序类源码分析 [一]排序类介绍 在Django REST framework (DRF)中,排序类用于处理API端点的排序操作,允许客户端请求按特定字段对数据进行升序或降序排序. 排序类是一 ...

  10. 6-nn.Module模块使用

    1. nn.Module模块使用 ① nn.Module是对所有神经网络提供一个基本的类. ② 我们的神经网络是继承nn.Module这个类,即nn.Module为父类,nn.Module为所有神经网 ...