模拟37 题解

A. 简单的区间

看到这种题,一眼就是枚举最值,则确定左右区间,统计跨最值点的答案。

维护前缀和后缀和就完了。

于是自然地想到用个主席树,还是枚举小的区间,复杂度$O(nlog^2n)$。

复杂度证明见模拟31 C.English

正确的算法一定无法避免枚举小区间,已经带了一个log,

O(1)查询,估计得用桶。

所以算法流程是:

先$solve(轻儿子)$,

回来把桶整个清空。

接着$solve(重儿子)$,

接着枚举轻儿子,在桶里找贡献累加。

接着再枚举轻儿子,维护好整个桶。

 

 

 

B. 简单的玄学

路丽姐姐教你古典概型系列。

设$dp(i,0)$表示已经选择了i次,还没有重复的方案数。

$dp(i,1)$表示已经选择了i次,已经有至少一个重复的方案数。

显然$dp(i,0)=dp(i-1,0)*(2^n-i+1)$

$dp(i,1)=dp(i-1,1)*2^n+dp(i-1,0)*(i-1)$

最终答案就是$\frac{dp(m,1)}{2^{nm}}$。

然而以上全是扯淡没必要打这么麻烦,

发现$dp(m,0)+dp(m,1)=2^{nm}$

$dp(m,0)=\frac{2^{nm}!}{(2^{nm}-m)!}$

只要算出$\frac{dp(m,0)}{2^{nm}}$,再一减就可以了。

在取模的意义下约分是很困难的。

但是本题保证分母质因子只有2,只要提出分子中的2就可以了。

发现显然$(2^n-i)$中质因子2的个数与$i$相同,于是问题又转化成了求阶乘中质因子2的个数。

不断给阶乘的最大项>>1,求和就行了。

理由是分别统计$2^i$的倍数。

 

 

 

C. 简单的填数

一道贪心题,被我打成了dp

设dp(i,j)表示第i个受限制的点,前面已经连续了j个与它相同的数。

值为1表示合法,0表示不合法。

记录前趋。

最终找到最优答案,生成一个方案就可以了。

这种打法细节很多。

转载于:https://www.cnblogs.com/skyh/p/11470826.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值