CF1946E 题解
赛场上差一点做出来。
首先发现左右两部分是比较独立的,所以可以分开计算后合并。
注意到我们可以把整个数集分成左右两部分,即 \(\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 题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
- JSOI2016R3 瞎BB题解
题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...
随机推荐
- vue3 基础-API-响应式 ref, reactive
上篇咱介绍了 CompositionAPI, 其核心思想是直接在函数作用域内定义响应式状态变量,并将从多个函数中得到的状态组合起来处理复杂问题. 然后初介绍了 setup 函数的作用, 即其是在 cr ...
- C# Environment.CurrentDirectory和AppDomain.CurrentDomain.BaseDirectory的区别
Environment.CurrentDirectory 和 AppDomain.CurrentDomain.BaseDirectory 都是C#中用于获取当前应用程序的目录路径的方法,但是它们的用途 ...
- Vim编辑器基本用法
热门的Linux操作系统中都会默认安装一款文本编辑器-----Vim.它有三种模式:命令模式,末行模式和编辑模式. 命令模式 控制光标的移动,可对文本进行删除,复制,粘贴. 输入模式 正常的文本录入 ...
- Number of Atoms——LeetCode进阶路
原题链接https://leetcode.com/problems/number-of-atoms/ 题目描述 Given a chemical formula (given as a string) ...
- 【多线程】Java多线程与并发编程全解析
Java多线程与并发编程全解析 多线程编程是Java中最具挑战性的部分之一,它能够显著提升应用程序的性能和响应能力.本文将全面解析Java多线程与并发编程的核心概念.线程安全机制以及JUC工具类的使用 ...
- React-Native开发鸿蒙NEXT-图片上传
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- Antd VUE中table子表同时只展开一个子信息的说明
前言 在网上搜索了很久,很多方法都不太好用,不过经过整理发现,有一个方式是最简单的,比网路上那些copy粘贴的千篇一律的错来说,其实真正的使用方式很简单 想必大家要实现的效果都是上图这样的 <t ...
- 题解:CF1977D XORificator
题目链接:link. 题目大概其实就是想让我们通过翻转某些行,使得尽可能多的列成为特殊列. 众所周知,暴力肯定是不行的,所以我们需要考虑优化! 对于每一列 \(j\),枚举每一行 \(i\),通过翻转 ...
- SRM合同更新行项目(组件/SAPSRM/WDC_CTR_DOTC_IT)
* Get the selected elements of the item table > lt_elem_set = lon_ctr_item->get_selected_eleme ...
- [CSP-S 2022] 数据传输
link 题外话:考场写了个 \(3^3\) 巨大多恶心的分讨倍增写吐了,不仅没调出来还导致没时间仔细考虑 T1 T3 的 bug,感谢这题送我退役. 对于 \(K=1\),相当于树上路径点权和. 对 ...