当前位置:网站首页>775 Div.1 C. Tyler and strings combinatorial mathematics
775 Div.1 C. Tyler and strings combinatorial mathematics
2022-07-05 04:45:00 【Strezia】
C
Combinatorial mathematics ,1900, Array of numbers
The question
give s , t s, t s,t Two sequences , The lengths are n , m n,m n,m, ask s s s How many sorting methods meet s s s The dictionary order of t t t Small . 1 ≤ n , m ≤ 2 e 5 1\leq n,m\leq 2e5 1≤n,m≤2e5
Ideas
Because it is compared in dictionary order , So if s 1 < t 1 s_1<t_1 s1<t1 After that, you can row at will , So before considering enumeration i − 1 i-1 i−1 The bits are the same and s i < t i s_i<t_i si<ti The sorting methods of are c n t i cnt_i cnti Kind of , The final answer is ∑ i = 1 i = n c n t i \sum_{i=1}^{i=n} cnt_i ∑i=1i=ncnti .
So how to ask c n t i cnt_i cnti Well ? If repeatable arrangement is not considered , that c n t i = n o w × ( n − i ) ! cnt_i= now \times (n-i)! cnti=now×(n−i)! , namely To the first i Bit current Satisfaction is less than t i t_i ti Multiply the number of by the total arrangement of the following numbers ( because i i i The following numbers can be taken at will ). n o w now now You can directly use the number array to maintain the prefix and ( Because of the former i − 1 i-1 i−1 The two bit sequences are the same , So you can directly reduce that number 1). So the key problem is how to add repeatable permutation .
First, the repeatable arrangement should be in n ! n! n! Divided by the factorial of the number of occurrences of each element . That is, when we traverse to i i i When a , To be in ( n − i ) ! (n-i)! (n−i)! Divided by c n t 1 ! × c n t 2 ! × c n t i ! . . . . × c n t n ! {cnt_1!\times cnt_2!\times cnt_i!....\times cnt_n!} cnt1!×cnt2!×cnti!....×cntn!
among c n t 1 cnt_1 cnt1 yes Before subtraction i − 1 i-1 i−1 Digit number The number of corresponding numbers after . Then we can preprocess out i = 0 i=0 i=0 The above formula of tense is recorded as fenzi
, from
1 c n t 1 ! × c n t 2 ! × ( c n t i − 1 ) ! . . . . × c n t n ! = 1 c n t 1 ! × c n t 2 ! × c n t i ! . . . . × c n t n ! × c n t i \frac{1}{cnt_1!\times cnt_2!\times (cnt_i-1)!....\times cnt_n!}=\frac{1}{cnt_1!\times cnt_2!\times cnt_i!....\times cnt_n!}\times cnt_i cnt1!×cnt2!×(cnti−1)!....×cntn!1=cnt1!×cnt2!×cnti!....×cntn!1×cnti, After each iteration, you just need to fenzi *= cnt[t[i]]
And update the cnt[t[i]]
that will do .
ps. Don't forget to consider s s s It may happen to be t t t Prefix of , Began to forget , Fortunately, there are examples 1
Code
void solve() {
cin >> n >> m;
fac[0] = 1;
for(int i = 1; i <= n; i++) {
fac[i] = (fac[i-1] * i) % P;
}
for(int i = 1; i <= n; i++) {
cin >> s[i];
update(s[i], 1);
cnt[s[i]]++;
}
for(int i = 1; i <= m; i++) {
cin >> t[i];
}
int ans = 0;
int mi = min(n, m);
int fz = 1;
for(int i = 1; i <= 2e5; i++) {
if(cnt[i]) {
fz = fz * fac[cnt[i]] % P;
}
}
fz = power(fz, P - 2);
int flag = 1;
if(n >= m) {
flag = 0;
}
for(int i = 1; i <= mi; i++) {
int p = ask(t[i] - 1);
ans = (ans + p * fac[n-i] % P * fz % P) % P;
if(!cnt[t[i]]) {
flag = 0;
break;
}
fz = fz * cnt[t[i]] % P;
cnt[t[i]]--;
update(t[i], -1);
}
ans += flag;
ans %= P;
cout << ans << endl;
}
边栏推荐
- [groovy] closure (closure call | closure default parameter it | code example)
- Function overloading
- How can CIOs use business analysis to build business value?
- Observable time series data downsampling practice in Prometheus
- [popular science] basic knowledge of thermal design: heat dissipation analysis of 5g optical devices
- 【acwing】837. Number of connected block points
- 指针函数(基础)
- Neural networks and deep learning Chapter 2: machine learning overview reading questions
- 2022 American College Students' mathematical modeling ABCDEF problem thinking /2022 American match ABCDEF problem analysis
- JVM 原理和流程简介
猜你喜欢
质量体系建设之路的分分合合
直播预告 | 容器服务 ACK 弹性预测最佳实践
[groovy] closure (Introduction to closure class closure | this, owner, delegate member assignment and source code analysis)
3 minutes learn to create Google account and email detailed tutorial!
Managed service network: application architecture evolution in the cloud native Era
Wan broadband access technology V EPON Technology
Private collection project practice sharing [Yugong series] February 2022 U3D full stack class 006 unity toolbar
TPG x AIDU | AI leading talent recruitment plan in progress!
Discussion on the dimension of confrontation subspace
取余操作是一个哈希函数
随机推荐
49 pictures and 26 questions explain in detail what is WiFi?
Setting up redis cluster cluster under Windows
2022 thinking of mathematical modeling D problem of American college students / analysis of 2022 American competition D problem
SQL set operation
What are the building energy-saving software
Introduction to RT thread kernel (5) -- memory management
[groovy] closure (closure parameter list rule | default parameter list | do not receive parameters | receive custom parameters)
A survey of automatic speech recognition (ASR) research
托管式服务网络:云原生时代的应用体系架构进化
直播预告 | 容器服务 ACK 弹性预测最佳实践
Scope of package class package
Error statuslogger log4j2 could not find a logging implementation
解密函数计算异步任务能力之「任务的状态及生命周期管理」
[Chongqing Guangdong education] National Open University 2047t commercial bank operation and management reference test in autumn 2018
Rk3399 platform development series explanation (network debugging) 7.29 summary of network performance tools
Web开发人员应该养成的10个编程习惯
[groovy] closure (Introduction to closure class closure | this, owner, delegate member assignment and source code analysis)
次小生成树
Managed service network: application architecture evolution in the cloud native Era
假设检验——《概率论与数理统计》第八章学习笔记