正解:$exLucas$+容斥

解题报告:

传送门!

在做了一定的容斥的题之后再看到这种题自然而然就应该想到容斥,,,?

没错这题确实就是容斥,和这题有点儿像

注意下的是这里的大于和小于条件处理方式不同昂$QwQ$

对于大于等于,直接在一开始就先给它那么多就好,就先提前把$m-=\sum_{i=n_{1}+1}^{n_{1}+n_{2}} A_i$,这样就只剩小于等于的条件了

小于等于,一看最多就8个,显然就成了经典容斥套路题了鸭,

于是就枚举哪个爆了,然后可重排列搞下,容斥下,就做完了

放下推出来的式子趴,,,$\sum_{s} [\ |s|\ \&\ 1\ ]\cdot \binom{n-\sum_{i\in S}(x_{i}+1)+m-1}{m}$,大概是这样儿的,如果有问题我打完代码之后会$upd$的$QwQ$

但是还有一个要注意的就,这个$mod$不一定是质数昂,,,所以考虑用个$exLucas$就欧克了鸭

$over$

昂还有一个卡时间的小$tip$,,,就是在$exLucas$里最开始特判下,当$n<0$,$m<0$,$n<m$的时候就可以直接$return\ 0$了,这样就能成功从2571$ms$变成150$ms$,,,

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define il inline
  4. #define gc getchar()
  5. #define int long long
  6. #define ri register int
  7. #define rb register bool
  8. #define rc register char
  9. #define rp(i,x,y) for(ri i=x;i<=y;++i)
  10.  
  11. const int N=1e6+;
  12. int fac_cnt,A[N],B[N],mod,wei[N],tmpp;
  13.  
  14. il int read()
  15. {
  16. rc ch=gc;ri x=;rb y=;
  17. while(ch!='-' && (ch>'' || ch<''))ch=gc;
  18. if(ch=='-')ch=gc,y=;
  19. while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
  20. return y?x:-x;
  21. }
  22. il void ex_gcd(ri a,ri b,ri &x,ri &y){if(!b){x=;y=;return;}ex_gcd(b,a%b,y,x);y-=(a/b)*x;}
  23. il int power(ri x,ri y){/*if(!x)return 0;*/ri ret=;while(y){if(y&)ret=1ll*ret*x%mod;x=1ll*x*x%mod;y>>=;}return ret;}
  24. struct nod
  25. {
  26. int p,pk,jc[N];
  27. il void init(){jc[]=;rp(i,,pk)jc[i]=1ll*jc[i-]*(i%p?i:)%pk;}
  28. il int power(ri x,ri y){ri ret=;while(y){if(y&)ret=1ll*ret*x%pk;x=1ll*x*x%pk;y>>=;}return ret;}
  29. il int inv(ri d){ri x,y;ex_gcd(d,pk,x,y);return (x%pk+pk)%pk;}
  30. il int multi(ri x){ri ret=;while(x){ret=ret*power(jc[pk],x/pk)%pk*jc[x%pk]%pk;x/=p;}return ret;}
  31. il void getp(ri x,ri op,ri &k){while(x)k+=op*(x/p),x/=p;}
  32. il int C(ri n,ri m)
  33. {
  34. ri a=multi(n),b=multi(m),c=multi(n-m),k=;getp(n,,k);getp(m,-,k);getp(n-m,-,k);
  35. return 1ll*a*inv(b)%pk*inv(c)%pk*power(p,k)%pk;
  36. }
  37. nod(){pk=;}
  38. }fac[];
  39. il int crt()
  40. {
  41. ri p=A[],r=B[];
  42. rp(i,,fac_cnt)
  43. {ri x,y,np=A[i]*p;ex_gcd(p,A[i],x,y);x=(1ll*x*(B[i]-r)%np+np)%np;r=(1ll*x*p%np+r+np)%np;p=np;}
  44. return r;
  45. }
  46. il int ex_lucas(ri n,ri m)
  47. {
  48. if(n< || m< || n<m)return ;
  49. rp(i,,fac_cnt)A[i]=fac[i].pk,B[i]=fac[i].C(n,m);
  50. return crt();
  51. }
  52.  
  53. main()
  54. {
  55. int T=read();tmpp=mod=read();
  56. for(ri i=;i*i<=mod;++i){if(!(mod%i))fac[++fac_cnt].p=i;while(!(mod%i))fac[fac_cnt].pk*=i,mod/=i;}
  57. if(mod>)fac[++fac_cnt].p=mod,fac[fac_cnt].pk=mod;mod=tmpp;
  58. rp(i,,fac_cnt)fac[i].init();
  59. while(T--)
  60. {
  61. ri n=read(),n1=read(),n2=read(),m=read()-n,S=<<n1,as=;
  62. rp(i,,n1+n2)wei[i]=read()-;rp(i,n1+,n1+n2)m-=wei[i];
  63. rp(i,,S-)
  64. {
  65. ri opt=,tmp_m=m;
  66. rp(j,,n1)if(i&(<<(j-)))opt=mod-opt,tmp_m-=wei[j]+;
  67. as=(as+1ll*opt*ex_lucas(tmp_m+n-,n-)%mod)%mod;
  68. }
  69. printf("%lld\n",as);
  70. }
  71. return ;
  72. }

洛谷$P$3301 $[SDOI2013]$方程 $exLucas$+容斥的更多相关文章

  1. 洛谷P3172 [CQOI2015]选数(容斥)

    传送门 首先,进行如下处理 如果$L$是$K$的倍数,那么让它变成$\frac{L}{K}$,否则变成$\frac{L}{K}+1$ 把$H$变成$\frac{H}{K}$ 那么,现在的问题就变成了在 ...

  2. 洛谷P1447 [NOI2010]能量采集(容斥)

    传送门 很明显题目要求的东西可以写成$\sum_{i=1}^{n}\sum_{j=1}^m gcd(i,j)*2-1$(一点都不明显) 如果直接枚举肯定爆炸 那么我们设$f[i]$表示存在公因数$i$ ...

  3. 洛谷P1450 [HAOI2008]硬币购物 背包+容斥

    无限背包+容斥? 观察数据范围,可重背包无法通过,假设没有数量限制,利用用无限背包 进行预处理,因为实际硬币数有限,考虑减掉多加的部分 如何减?利用容斥原理,减掉不符合第一枚硬币数的,第二枚,依次类推 ...

  4. bzoj 2005 & 洛谷 P1447 [ Noi 2010 ] 能量采集 —— 容斥 / 莫比乌斯反演

    题目:bzoj 2005 https://www.lydsy.com/JudgeOnline/problem.php?id=2005   洛谷 P1447 https://www.luogu.org/ ...

  5. 洛谷P2522 [HAOI2011]Problem b (莫比乌斯反演+容斥)

    题意:求$\sum_{i=a}^{b}\sum_{j=c}^{d}[gcd(i,j)==k]$(1<=a,b,c,d,k<=50000). 是洛谷P3455 [POI2007]ZAP-Qu ...

  6. 模板—点分治A(容斥)(洛谷P2634 [国家集训队]聪聪可可)

    洛谷P2634 [国家集训队]聪聪可可 静态点分治 一开始还以为要把分治树建出来……• 树的结构不发生改变,点权边权都不变,那么我们利用刚刚的思路,有两种具体的分治方法.• A:朴素做法,直接找重心, ...

  7. 洛谷 P6295 - 有标号 DAG 计数(生成函数+容斥+NTT)

    洛谷题面传送门 看到图计数的题就条件反射地认为是不可做题并点开了题解--实际上这题以我现在的水平还是有可能能独立解决的( 首先连通这个条件有点棘手,我们尝试把它去掉.考虑这题的套路,我们设 \(f_n ...

  8. 洛谷 P7360 -「JZOI-1」红包(Min-Max 容斥+推式子)

    洛谷题面传送门 hot tea. 首先注意到这个 \(\text{lcm}\) 特别棘手,并且这里的 \(k\) 大得离谱,我们也没办法直接枚举每个质因子的贡献来计算答案.不过考虑到如果我们把这里的 ...

  9. 洛谷P5206 [WC2019]数树 [容斥,DP,生成函数,NTT]

    传送门 Orz神仙题,让我长了许多见识. 长式子警告 思路 y=1 由于y=1时会导致后面一些式子未定义,先抓出来. printf("%lld",opt==0?1:(opt==1? ...

随机推荐

  1. python小数据池 is和 == 再谈编码

    1. 小数据池, id() 小数据池针对的是: int, str, bool 在py文件中几乎所有的字符串都会缓存. id() 查看变量的内存地址 2. is和==的区别 is 比较的是内存地址 == ...

  2. Data Flow-File Read-基本过程

  3. 微信支付、支付宝支付和QQ钱包支付

    最近忙于对接微信支付和支付宝支付,注册微信公众号,认证公众号,注册微信支付商户号并进行认证: 签约支付宝支付产品(手机网站支付.PC网站支付),注册支付宝企业账号(企业账号权限更大): 注册QQ钱包商 ...

  4. Cutting Bamboos 主席树+二分+前缀和

    二分第x次砍的位置,然后用线段树查询小于这个位置的数的个数和值的和.然后判断即可 注意!!!主席树是通过动态开点实现的,本身已经不用再从1开始了,而本题开的范围也应该是0,100000 而不是1,10 ...

  5. 【codeforces 520C】DNA Alignment

    [题目链接]:http://codeforces.com/contest/520/problem/C [题意] 给你一个函数; 它的作用是评估两个字符串的相似程度; 评估的时候: 保持一个字符串不动, ...

  6. WPF 之 DataTemplate 实例(摘抄)

     

  7. Python--day70--ORM一对一表结构

    ORM一对一表结构:

  8. 手风琴jq实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. uni-app学习记录02-属性绑定.for循环

    <template> <view class="content"> <text> 我是首页 </text> <!-- 输出纯字 ...

  10. Python--day40--全局解释器锁

    1,起一百个线程和起一百个进程所花的时间对比(开启效率的较量): import time from threading import Thread from multiprocessing impor ...