bzoj3129 [Sdoi2013]方程 容斥+扩展lucas
调了两天,全是低级错误和脑子问题
对于>=的,直接用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相关推荐
- Luogu4640 BJWC2008 王之财宝 容斥、Lucas
传送门 题意:有$N$种物品,其中$T$个物品有限定数量$B_i$,其他则没有限定.问从中取出不超过$M$个物品的方案数,对质数$P$取模.$N,M \leq 10^9 , T \leq 15 , P ...
- 51nod1667(容斥)
这是一道很好的容斥原理题. 首先这里推荐两道类似的题,spojRNG(1667是它的离散版本),还有bzoj3129(两题容斥部分很类似) 我们首先把第一类区间分为(-INF,L - 1] 与 (-I ...
- CodeForces 1139D Steps to One(概率dp 容斥/莫比乌斯反演)
题目链接https://codeforces.com/contest/1139/problem/D 题意:给定一个m,每次在1-m中随机取一个数放到容器中,当容器的gcd为1时停止,求期望步数,用分数 ...
- hdu-5794 A Simple Chess(容斥+lucas+dp)
题目链接: A Simple Chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- F-子序列(组合数,打表,扩展欧拉,容斥)
题目链接 题目描述 给出一个长度为n的序列,你需要计算出所有长度为k的子序列中,除最大最小数之外所有数的乘积相乘的结果 输入描述: 第一行一个整数T,表示数据组数. 对于每组数据,第一行两个整数N,k ...
- P4707-重返现世【dp,数学期望,扩展min-max容斥】
正题 题目链接:https://www.luogu.com.cn/problem/P4707 题目大意 nnn个物品,每次生成一种物品,第iii个被生成的概率是pim\frac{p_i}{m}mpi ...
- P4707 重返现世 扩展 MinMax 容斥+DP
题目传送门 https://www.luogu.org/problem/P4707 题解 很容易想到这是一个 MinMax 容斥的题目. 设每一个物品被收集的时间为 \(t_i\),那么集齐 \(k\ ...
- 洛谷P4707 重返现世(扩展MinMax容斥+dp)
传送门 我永远讨厌\(dp.jpg\) 前置姿势 扩展\(Min-Max\)容斥 题解 看纳尔博客去→_→ 咱现在还没搞懂为啥初值要设为\(-1\)-- //minamoto #include< ...
- 【洛谷P4707】重返现世【扩展Min-Max容斥】【dp】
传送门 题意:NNN种物品,每次第iii种产生概率为piM\frac{p_i}{M}Mpi,∑pi=M\sum p_i=M∑pi=M.求生成KKK种不同物品的期望时间 模998244353998 ...
最新文章
- 有规律格式化文本文件插入数据库
- hdu 2448 Mining Station on the Sea(最短路+费用流)
- 科技强,必须应用数学强
- c++输出重定向 linux,C++ stderr/stdout 重定向到文件
- ts watch路由 参数变化_TypeScript基础(六):TS 在 Vue 中的用法,data,生命周期,methods,computed,props,watch,$emit...
- vector数组的使用——机器翻译(洛谷 P1540)
- windows 7 与linux 双系统 安装
- 关于C++ const成员的一些细节
- 2011-10-10
- 走进javascript——DOM事件
- js调用数科阅读器_js调用ocx控件(读写IC卡
- C# 解析JSON方法总结
- 2020年拼多多校招面试题及答案-最全最新-持续更新中
- mysql中日期相减_Excel教程:Excel日期问题的小妙招
- 第五章 组合逻辑电路设计
- 【matlab教程】11、动态数组
- 人脸识别API/SDK 汇总(转)
- MindMapper中如何添加备注
- 灵魂筹码一直显示连接服务器,灵魂筹码进不去怎么办_灵魂筹码进入显示错误解决方法_3DM单机...
- C语言题目——通讯录(静态存储+动态存储)
热门文章
- 红橙Darren视频笔记 条件查询 删除 更新,数据库结合http做缓存机制(数据库操作)下
- Pandas出现KeyError及其分析解决
- 问题:如何将多个文件里内容都提取出来
- Win7修复“会话‘循环内核上下文记录器’已停止,原因是存在以下错误:0xC0000188”
- vue3 编译很慢_Vue 项目编译时间过长问题
- windos 服务怎么写_周岁邀请函怎么写
- endwith php,endwith函数怎么使用
- idea 编码扫描插件_代码神器:拒绝重复编码,这款IDEA插件了解一下
- 成绩转换(百分制到五级制的转换)-(只作新手参考)
- dvd打开显示服务器失败,9g、10g和11G PowerEdge服务器未启动的e1000故障安全错误