码迷,mamicode.com
首页 > 其他好文 > 详细

省选前模拟

时间:2020-01-03 12:04:48      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:limits   二进制   注意   tps   html   次数   tmp   影响   for   

 

 

 

 

 


2020-01-02:

凭实力抱0,就没什么好说的。

T1的式子推错,但没有拍。T2数组开小,可能最近时间逐渐膨胀,已经忘记了自己渣渣的本质了。

T1:

刚开始推了错误的柿子,将序列按题意分成三部分用隔板法。

然后其实第一部分隔板显然是错的,因为不像第二部分钦定每个已经选了$A_i$个就消除影响了。

第一部分先钦定所有都选了$A_i$,在考虑把减的分配,但不能保证减的<=$A_i$。

过了样例没多想,太大意了。

正解对第一部分奇加偶减容斥,还是套用先选够的思想,但这里是至少有多少个不合法,二进制枚举(所以$n1$<=8)。

因为模数,去学了波$exlucas$。

技术图片
 1 inline LL fac(int n,const int &pi,const int &pk){
 2         if(!n)return 1LL;
 3         LL res=1LL;
 4         for(int i=2;i<=pk;++i)if(i%pi)res=res*i%pk;
 5         res=qpow(res,n/pk,pk);
 6         for(int i=2;i<=n%pk;++i)if(i%pi)res=res*i%pk;
 7         return res*fac(n/pi,pi,pk)%pk;
 8     }
 9     inline LL CRT(int ai,int mi,const int &Mod){
10         return ai*(Mod/mi)%Mod*qpow(Mod/mi,phi(Mod)-1,Mod)%Mod;
11     }
12     inline LL C(int n,int m,int pi,int pk){
13         LL fz=fac(n,pi,pk),fm1=fac(m,pi,pk),fm2=fac(n-m,pi,pk);
14         int k=0;
15         for(int i=n;i;i/=pi)k+=i/pi;
16         for(int i=m;i;i/=pi)k-=i/pi;
17         for(int i=n-m;i;i/=pi)k-=i/pi;
18         return fz*qpow(fm1,phi(pk)-1,pk)%pk*qpow(fm2,phi(pk)-1,pk)%pk*qpow(pi,k,pk)%pk;
19     }
20     inline LL exlucas(int n,int m,const int &Mod){
21         if(n<m)return 0;
22         if(!m)return 1;
23         LL res=0,tmp=Mod;
24         for(int i=2;i<=sqrt(Mod);++i)
25             if(tmp%i==0){
26                 int pk=1;
27                 while(tmp%i==0)tmp/=i,pk*=i;
28                 res=(res+CRT(C(n,m,i,pk),pk,Mod))%Mod;
29             }
30         if(tmp>1)res=(res+CRT(C(n,m,tmp,tmp),tmp,Mod))%Mod;
31         return res%Mod;
32     }
板子

实现过程是把模数分解质因子,求出每个$C_{n}^{m} \equiv a (mod\ P^{k})$的$a$,然后$CRT$合并。

然后利用$\frac{\frac{n!}{P^{x}}}{\frac{m!}{P^{y}}*\frac{(n-m)!}{P^{z}}}*P^{x-y-z} \equiv a(mod\ P^{k})$的形式。

把所有阶乘的$P$提出来,使互质可求逆元,求阶乘提质因子是递归过程,根据化的式子搞循环节,具体网上证明比较清晰。

单次求$a$的时间复杂度为$log_P$,如果调用次数多,预处理记忆化一些数组即可。

T2:

$FWT$的题,$FFT$时并没有写过题,全忘了。

注意变化值求一个点值数组。

or,and都是对于每个分治区间最高位影响。xor不会证。

dalao的博客考虑点值具有结合率和交换率。

所以第$2^{i}$行的点值就是第$2^{i-1}$的点值相乘。

要的答案为$\sum_{i=0}^{p}{x^{i}}$,可以倍增搞定$p$。

$f[x][i]=\sum\limits_{j=0}^{2^i-1} x^{2^j}$

$f[x][i]=f[x][i-1]+f[x^{2^{2^{i-1}}}][i-1]$

因为$f[x][i]$定义左闭右开,所以$P++$

T3:

对于状态$b$,状态$a_i$都可以转移,$g_i$为$a_i$的全局概率。

期望逆推可以直接$\sum {a_i}$

正推是$\frac{\sum g_{i}*a_{i}}{\sum g_{i}}$

不会证。

因为一个区间$[l,r]$可以分成$[l,k],[k+1,r]$,其中$s[k]==‘O‘$,所以具有子结构。

然后计忆化搜索,颓的代码。。。

省选前模拟

标签:limits   二进制   注意   tps   html   次数   tmp   影响   for   

原文地址:https://www.cnblogs.com/2018hzoicyf/p/12144020.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!