调了两天,全是低级错误和脑子问题

对于>=的,直接用m减掉

对于<=的,一开始想枚举减多少,但发现对于每个枚举的值是独立的,所以是1e9的

然后由于>=和<=是两个对立的情况,所以直接用容斥,合法的减掉不合法的

但由于我简单容斥做多了,所以就直接用全合法的-全不合法的

然后一定要放弃合法的-不合法的这种想法,应该改成0不合法-1不合法+2不合法-3不合法。。。

然后快速幂还没取模了,exlucas的快速幂还算错了次方

码:

#include<iostream>
#include<cstdio>
using namespace std;
#define ll long long
ll TREE,x,y,a[9999],P[9999],p[9999],T,cnt,lin,i,m2,n,n2,n1,m,b[99];
void exgcd(ll a,ll b)
{if(!b){x=1;y=0;return ;}exgcd(b,a%b);ll t=x;x=y;y=t-(a/b)*y;
}
ll ksm(ll a,ll b,ll c)
{ll ans=1;while(b){if(b&1)ans=a*ans%c;b/=2;a=a*a%c;     }return ans;
}
ll CRT()
{int i;ll daan=0;for(i=1;i<=cnt;i++){ll mi=TREE/P[i];exgcd(mi,P[i]);daan=(daan+x*a[i]%TREE*mi%TREE)%TREE;        }   if(daan<0)daan+=TREE;return daan;
}
struct la
{ll gs,ans;
};
la exlucas(ll n,int xh)
{ll ls=n/p[xh],ys=n%P[xh],i;la o;o.ans=1;o.gs=ls;if(n==0)return o;
if(n>=P[xh])    for(i=1;i<=P[xh];i++){if(i%p[xh]==0)continue;         o.ans*=i;o.ans%=P[xh];}        o.ans=ksm(o.ans,n/P[xh],P[xh]);
for(i=1;i<=ys;i++){if(i%p[xh]==0)continue;o.ans*=i;o.ans%=P[xh];}la nd=exlucas(ls,xh);o.gs+=nd.gs;o.ans=o.ans*nd.ans%P[xh];return o;
}
ll C(ll n,ll m)
{if(n<0||n>m)return 0; int i,ms;for(ms=1;ms<=cnt;ms++){ a[ms]=1;
la fz=exlucas(m,ms);
la fm1=exlucas(n,ms);
la fm2=exlucas(m-n,ms);
fz.gs-=fm1.gs+fm2.gs;
exgcd(fm1.ans,P[ms]);
fz.ans=fz.ans*x%P[ms];
exgcd(fm2.ans,P[ms]);
fz.ans=fz.ans*x%P[ms];
a[ms]=fz.ans*ksm(p[ms],fz.gs,P[ms])%P[ms];
if(a[ms]<0)a[ms]+=P[ms];}return CRT();
}   ll daan=0;
int jishu=0;
void dfs(ll m2,ll wz)
{if(wz==n1+1){if(jishu&1){daan-=C(n-1,m2-1);    daan%=TREE;}   else daan+=C(n-1,m2-1),daan%=TREE;return ;       }jishu++;dfs(m2-b[wz],wz+1);jishu--;dfs(m2,wz+1);
}
int main()
{scanf("%lld%lld",&T,&TREE);lin=TREE;for(i=2;i*i<=lin;i++){if(lin%i==0)P[++cnt]=1,p[cnt]=i;while(lin%i==0)lin/=i,P[cnt]*=i;}if(lin!=1)P[++cnt]=p[cnt]=lin;while(T--){daan=0;scanf("%lld%lld%lld%lld",&n,&n1,&n2,&m);m2=m;for(i=1;i<=n1;i++)scanf("%lld",&b[i]);for(i=1;i<=n2;i++)scanf("%lld",&x),m-=(x-1),m2-=(x-1);dfs(m,1);printf("%lld\n",(daan+TREE)%TREE);}
}

bzoj3129 [Sdoi2013]方程 容斥+扩展lucas相关推荐

  1. Luogu4640 BJWC2008 王之财宝 容斥、Lucas

    传送门 题意:有$N$种物品,其中$T$个物品有限定数量$B_i$,其他则没有限定.问从中取出不超过$M$个物品的方案数,对质数$P$取模.$N,M \leq 10^9 , T \leq 15 , P ...

  2. 51nod1667(容斥)

    这是一道很好的容斥原理题. 首先这里推荐两道类似的题,spojRNG(1667是它的离散版本),还有bzoj3129(两题容斥部分很类似) 我们首先把第一类区间分为(-INF,L - 1] 与 (-I ...

  3. CodeForces 1139D Steps to One(概率dp 容斥/莫比乌斯反演)

    题目链接https://codeforces.com/contest/1139/problem/D 题意:给定一个m,每次在1-m中随机取一个数放到容器中,当容器的gcd为1时停止,求期望步数,用分数 ...

  4. hdu-5794 A Simple Chess(容斥+lucas+dp)

    题目链接: A Simple Chess Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Ot ...

  5. F-子序列(组合数,打表,扩展欧拉,容斥)

    题目链接 题目描述 给出一个长度为n的序列,你需要计算出所有长度为k的子序列中,除最大最小数之外所有数的乘积相乘的结果 输入描述: 第一行一个整数T,表示数据组数. 对于每组数据,第一行两个整数N,k ...

  6. P4707-重返现世【dp,数学期望,扩展min-max容斥】

    正题 题目链接:https://www.luogu.com.cn/problem/P4707 题目大意 nnn个物品,每次生成一种物品,第iii个被生成的概率是pim\frac{p_i}{m}mpi​ ...

  7. P4707 重返现世 扩展 MinMax 容斥+DP

    题目传送门 https://www.luogu.org/problem/P4707 题解 很容易想到这是一个 MinMax 容斥的题目. 设每一个物品被收集的时间为 \(t_i\),那么集齐 \(k\ ...

  8. 洛谷P4707 重返现世(扩展MinMax容斥+dp)

    传送门 我永远讨厌\(dp.jpg\) 前置姿势 扩展\(Min-Max\)容斥 题解 看纳尔博客去→_→ 咱现在还没搞懂为啥初值要设为\(-1\)-- //minamoto #include< ...

  9. 【洛谷P4707】重返现世【扩展Min-Max容斥】【dp】

    传送门 题意:NNN种物品,每次第iii种产生概率为piM\frac{p_i}{M}Mpi​​,∑pi=M\sum p_i=M∑pi​=M.求生成KKK种不同物品的期望时间 模998244353998 ...

最新文章

  1. 有规律格式化文本文件插入数据库
  2. hdu 2448 Mining Station on the Sea(最短路+费用流)
  3. 科技强,必须应用数学强
  4. c++输出重定向 linux,C++ stderr/stdout 重定向到文件
  5. ts watch路由 参数变化_TypeScript基础(六):TS 在 Vue 中的用法,data,生命周期,methods,computed,props,watch,$emit...
  6. vector数组的使用——机器翻译(洛谷 P1540)
  7. windows 7 与linux 双系统 安装
  8. 关于C++ const成员的一些细节
  9. 2011-10-10
  10. 走进javascript——DOM事件
  11. js调用数科阅读器_js调用ocx控件(读写IC卡
  12. C# 解析JSON方法总结
  13. 2020年拼多多校招面试题及答案-最全最新-持续更新中
  14. mysql中日期相减_Excel教程:Excel日期问题的小妙招
  15. 第五章 组合逻辑电路设计
  16. 【matlab教程】11、动态数组
  17. 人脸识别API/SDK 汇总(转)
  18. MindMapper中如何添加备注
  19. 灵魂筹码一直显示连接服务器,灵魂筹码进不去怎么办_灵魂筹码进入显示错误解决方法_3DM单机...
  20. C语言题目——通讯录(静态存储+动态存储)

热门文章

  1. 红橙Darren视频笔记 条件查询 删除 更新,数据库结合http做缓存机制(数据库操作)下
  2. Pandas出现KeyError及其分析解决
  3. 问题:如何将多个文件里内容都提取出来
  4. Win7修复“会话‘循环内核上下文记录器’已停止,原因是存在以下错误:0xC0000188”
  5. vue3 编译很慢_Vue 项目编译时间过长问题
  6. windos 服务怎么写_周岁邀请函怎么写
  7. endwith php,endwith函数怎么使用
  8. idea 编码扫描插件_代码神器:拒绝重复编码,这款IDEA插件了解一下
  9. 成绩转换(百分制到五级制的转换)-(只作新手参考)
  10. dvd打开显示服务器失败,9g、10g和11G PowerEdge服务器未启动的e1000故障安全错误