news 2026/6/12 12:50:48

Hz的计数问题总结

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Hz的计数问题总结

前言

看见 mod1e9 + 7 就跪了,遂写一篇博客把所有的计数问题、组合数学问题都记录下来…

正片

E. Girl Permutation

Some permutation of lengthn nnis guessed.

You are given the indices of its prefix maximums and suffix maximums.

Recall that a permutation of lengthk kkis an array of sizek kksuch that each integer from1 11tok kkoccurs exactly once.

Prefix maximums are the elements that are the maximum on the prefix ending at that element. More formally, the elementa i a_iaiis a prefix maximum ifa i > a j a_i > a_jai>ajfor everyj < i j < ij<i.

Similarly, suffix maximums are defined, the elementa i a_iaiis a suffix maximum ifa i > a j a_i > a_jai>ajfor everyj > i j > ij>i.

You need to output the number of different permutations that could have been guessed.

As this number can be very large, output the answer modulo1 0 9 + 7 10^9 + 7109+7.

感觉好经典的模型,没有想出来是因为一直在纠结两部分分开处理的情况下发生重复怎么办。。

实际上我们可以发现,只要先用组合数C CC选出一部分数字放在左边,剩下的部分放在右边,则两部分一定不会发生重复

但是一定存在一种方案使得它们摆放起来满足方案吗?

答案是YES,这个自己手玩一下就可以发现了,数量够的情况下,排列中的数字两两不同,则总会存在一种方式使得摆放是正确的。

因此分开考虑是合法的。

接下来就是单独考虑左边,我们从右向左(从高到低)遍历p pp数组,可以发现每两个相邻的下标中间存在着一些 gap,我们选择一些比 p[i] 和 p[i + 1] 都要小的数字填充这些 gap(全排列),所以就是comb(p[i + 1] - 2, p[i + 1] - p[i] - 1);

这里的 -2 是因为最大值和次大值已经放在了 p[i] 和 p[i + 1] 的位置,故,必须-2.

最后代码如下:

intqpow(inta,intk){a%=mod;i64 res=1%mod;while(k){if(k&1)res=(i64)res*a%mod;a=(i64)a*a%mod;k>>=1;}returnres;}intinv(intx){returnqpow(x,mod-2);}structComb{intn;vector<int>fac,invfac,pow2;Comb():n(0){}Comb(int_n):n(0){init(_n);}voidinit(intm){if(m<=n)return;fac.resize(m+1);invfac.resize(m+1);pow2.resize(m+1);pow2[0]=1;for(inti=1;i<=m;i++){pow2[i]=(int)(pow2[i-1]*2LL)%mod;}intstart=n>0?n+1:1;if(n==0){fac[0]=invfac[0]=1;}for(inti=start;i<=m;i++){fac[i]=(int)((i64)fac[i-1]*i%mod);}invfac[m]=qpow(fac[m],mod-2);for(inti=m;i>(n==0?1:n);i--){invfac[i-1]=(int)((i64)invfac[i]*i%mod);}n=m;}// fac[m]intF(intm){if(m>n)init(2*m);returnfac[m];}// invfac[m]intiF(intm){if(m>n)init(2*m);returninvfac[m];}// inv[m] = m^{-1}intinv(intm){returnqpow(m,mod-2);}// pow(2, n)intP2(intm){if(m<=n)returnpow2[m];returnqpow(2,m);}// A(n, m) = n! / (n - m)!intA(intn_,intm_){if(m_<0||m_>n_)return0;if(n_>n)init(2*n_);return(int)((i64)fac[n_]*invfac[n_-m_]%mod);}// C(n, m) = n! / (m! * (n - m)!)intC(intn_,intm_){if(m_<0||m_>n_)return0;if(n_>n)init(2*n_);return(int)((i64)fac[n_]*invfac[m_]%mod*invfac[n_-m_]%mod);}};Combcomb(1e6);voidsolve(){intn,m1,m2;cin>>n>>m1>>m2;vector<int>p(m1+1),s(m2+1);for(inti=1;i<=m1;i++){cin>>p[i];}for(inti=1;i<=m2;i++){cin>>s[i];}if(s[m2]!=n||p[1]!=1||s[1]!=p[m1]){cout<<0<<endl;return;}intans=comb.C(n-1,p.back()-1);for(inti=m1-1;i>=1;i--){intg=p[i+1]-p[i]-1;(ans*=comb.C(p[i+1]-2,g)*comb.F(g)%mod)%=mod;}for(inti=1;i<=m2-1;i++){intg=s[i+1]-s[i]-1;(ans*=comb.C(n-s[i]-1,g)*comb.F(g)%mod)%=mod;}cout<<ans<<endl;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 13:02:32

基于单片机的智能电能表

第一章 系统开发背景与意义 传统机械电能表存在计量精度低、抄表繁琐、无法实时监测用电状态等问题&#xff0c;难以满足现代电力系统的智能化管理需求。随着单片机技术与电力电子技术的发展&#xff0c;基于单片机的智能电能表成为解决上述痛点的理想方案。该表具不仅能实现高…

作者头像 李华
网站建设 2026/6/10 15:43:39

气温变化趋势预测全解析,基于R语言的ARIMA与ETS模型深度对比

第一章&#xff1a;气象数据的 R 语言趋势预测在气候研究与环境监测中&#xff0c;准确识别气温、降水等气象变量的变化趋势至关重要。R 语言凭借其强大的统计分析能力和丰富的可视化工具&#xff0c;成为处理时间序列型气象数据的首选平台。利用 R 中的 trend、zyp 和 forecas…

作者头像 李华
网站建设 2026/6/10 16:47:06

具身智能:梯队

截至2025年&#xff0c;中国在具身智能&#xff08;Embodied AI&#xff09;领域已涌现出一批技术领先、场景落地能力强的优秀企业。这些公司不仅在人形机器人、四足机器人、工业自动化等硬件形态上取得突破&#xff0c;更在视觉-语言-动作大模型&#xff08;VLA&#xff09;、…

作者头像 李华
网站建设 2026/6/10 13:28:56

Springboot3 + shardingsphere-jdbc5.5.2 按年月分表(动态创建表)

1、使用 shardingsphere 动态创建刷新节点 &#xff08;这个方式 在最新5.3以上的版本已经不支持自定义动态刷新actualDataNodes节点了。 ,但是我又不想一次创建所有表&#xff08;说不定什么时候就会修改表结构&#xff09;那么该怎么搞呢&#xff0c;我这里提供一个曲线方…

作者头像 李华
网站建设 2026/6/10 16:37:09

前端安全问题

1&#xff0c;核心漏洞整改&#xff1a;XSS&#xff08;跨站脚本攻击&#xff09;XSS 是前端最频发的漏洞&#xff0c;核心是 “注入恶意脚本并执行”&#xff0c;需从输入过滤、输出编码、执行限制三方面阻断解决 1 表单谁需要转义 2&#xff0c;强制过滤URL参数比如Vue中 不使…

作者头像 李华
网站建设 2026/6/12 12:42:57

【阻塞队列的等待唤醒机制】

阻塞队列的等待唤醒机制Java阻塞队列的等待唤醒机制详解及自定义实现1. 阻塞队列的基本概念2. ArrayBlockingQueue源码剖析&#xff08;等待唤醒机制&#xff09;核心字段3. 等待唤醒机制的两种实现方式4. 自定义一个简单阻塞队列5. 常见面试延伸问题总结Java阻塞队列的等待唤醒…

作者头像 李华