【模拟7.22】visit(卢卡斯定理&&中国剩余定理)
如此显然的组合数我把它当DP做,我真是。。。。
因为起点终点已经确定,我们发现如果我们确定了一个方向的步数其他方向也就确定了
组合数做法1:
设向右走了a步,然后向左走了b=a-n步,设向上为c,向下为d;
c+d=t-a-b; c-d=m;
求出c=(t+n+m-i-i)/2;if(c%2)continue;
(因为如果c不能整除2表示向右多走的步数无法走回)
组合数做法2:
参考nc神犇的做法
首先设水平方向一共走了i步,所以(i-n)/2为水平方向上返回的步数,
竖直方向上步数t-i,中同理返回的是(t-i-m)/2;
式子C(t,i)*C(i,(i-n)/2)*C(t-i,(t-i-m)/2)
(因为竖直方向+水平方向步数=t,所以不用乘C(t-i,t-i))
我们发现数据为多个质数乘积,显然可以用中国剩余定理求解,当然要提前分解质因数
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<string>
5 #include<algorithm>
6 #include<cmath>
7 #include<stack>
8 #include<vector>
9 #include<queue>
10 #define MAXN 100001
11 #define ps push_back
12 #define ll long long
13 using namespace std;
14 vector<int>su;ll jie[MAXN];
15 void fen(int x)
16 {
17 for(int i=2;i<=sqrt(x);++i)
18 {
19 if(x%i==0)
20 {
21 while(x%i==0)
22 {
23 x/=i;
24 }
25 su.ps(i);
26 }
27 }
28 if(x!=1)
29 {
30 su.ps(x);
31 }
32 }
33 ll pow(ll x,ll y,ll mod)
34 {
35 ll ans=1;
36 if(y==0)return 1;
37 while(y)
38 {
39 if(y&1)ans=ans*x%mod;
40 x=x*x%mod;
41 y>>=1;
42 }
43 return ans%mod;
44 }
45 ll C(ll x,ll y,ll mod)
46 {
47 if(y>x)return 0;
48 if(y==0)return 1;
49 return jie[x]*pow(jie[y]*jie[x-y]%mod,mod-2,mod)%mod;
50 }
51 ll lus(ll x,ll y,ll mod)
52 {
53 if(y>x)return 0;
54 if(y==0)return 1;
55 return lus(x/mod,y/mod,mod)*C(x%mod,y%mod,mod)%mod;
56 }
57 ll M[MAXN],ans[MAXN];
58 void exgcd(ll a,ll b,ll &x,ll &y)
59 {
60 if(b==0){
61 x=1;y=0;return ;
62 }
63 exgcd(b,a%b,x,y);
64 ll z=x;x=y;y=z-(a/b)*y;
65 return ;
66 }
67 ll sum;ll len=1;
68 void CRT()
69 {
70 for(ll i=0;i<su.size();++i)
71 {
72 len*=su[i];
73 //printf("%lld\n",len);
74 }
75 for(ll i=0;i<su.size();++i)
76 {
77 M[i]=len/su[i];
78 }
79 for(ll i=0;i<su.size();++i)
80 {
81 ll x,y;
82 exgcd(M[i],su[i],x,y);
83 x=(x+su[i])%su[i];
84 sum=(sum+ans[i]*M[i]*x)%len;
85 //printf("sum=%lld ans=%lld M=%lld x=%lld\n",sum,ans[i],M[i],x);
86 }
87 printf("%lld\n",sum);
88 }
89 ll t;
90 void fir(ll mod)
91 {
92 for(ll i=1;i<=min(mod,t);++i)
93 {
94 jie[i]=(jie[i-1]*i)%mod;
95 }
96 }
97 ll MOD,n,m;
98 int main()
99 {
100 scanf("%lld%lld",&t,&MOD);
101 scanf("%lld%lld",&n,&m);
102 if(n<0)n=-n;
103 if(m<0)m=-m;
104 jie[0]=1;
105 fen(MOD);
106 for(ll k=0;k<su.size();++k)
107 {
108 fir(su[k]);
109 ll mod=su[k];
110 //printf("mod=%lld\n",mod);
111 for(ll i=n;i<=t-m;++i)
112 {
113 ll a=i;
114 ll b=i-n;
115 ll c=(t+n+m-i-i);
116 if(c%2!=0)continue;c/=2ll;
117 ll d=t-a-b-c;
118 ans[k]=(ans[k]+lus(t,a,mod)*lus(t-a,b,mod)%mod*lus(t-a-b,c,mod)%mod+mod)%mod;
119 }
120 }
121 CRT();
122 }
【模拟7.22】visit(卢卡斯定理&&中国剩余定理)的更多相关文章
- ACM-ICPC 2015 Changchun Preliminary Contest J. Unknown Treasure (卢卡斯定理+中国剩余定理)
题目链接:https://nanti.jisuanke.com/t/A1842 题目大意:给定整数n,m,k,其中1≤m≤n≤1018,k≤10, 然后给出k个素数,保证M=p[1]*p[2]……*p ...
- 洛谷P2480 [SDOI2010]古代猪文(卢卡斯定理+中国剩余定理)
传送门 好吧我数学差的好像不是一点半点…… 题目求的是$G^{\sum_{d|n}C^d_n}mod\ 999911659$ 我们可以利用费马小定理$a^{k}\equiv a^{k\ mod\ (p ...
- 【Lucas组合数定理+中国剩余定理】Mysterious For-HDU 4373
Mysterious For-HDU 4373 题目描述 MatRush is an ACMer from ZJUT, and he always love to create some specia ...
- hdu 5446(2015长春网络赛J题 Lucas定理+中国剩余定理)
题意:M=p1*p2*...pk:求C(n,m)%M,pi小于10^5,n,m,M都是小于10^18. pi为质数 M不一定是质数 所以只能用Lucas定理求k次 C(n,m)%Pi最后会得到一个同余 ...
- BZOJ1951 [Sdoi2010]古代猪文 【费马小定理 + Lucas定理 + 中国剩余定理 + 逆元递推 + 扩展欧几里得】
题目 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久很久以前,在山的那 ...
- [bzoj2142]礼物(扩展lucas定理+中国剩余定理)
题意:n件礼物,送给m个人,每人的礼物数确定,求方案数. 解题关键:由于模数不是质数,所以由唯一分解定理, $\bmod = p_1^{{k_1}}p_2^{{k_2}}......p_s^{{k_ ...
- Hdu 5446 Unknown Treasure (2015 ACM/ICPC Asia Regional Changchun Online Lucas定理 + 中国剩余定理)
题目链接: Hdu 5446 Unknown Treasure 题目描述: 就是有n个苹果,要选出来m个,问有多少种选法?还有k个素数,p1,p2,p3,...pk,结果对lcm(p1,p2,p3.. ...
- 逆元 exgcd 费马小定理 中国剩余定理的理解和证明
一.除法取模逆元 如果我们要通过一个前面取过模的式子递推出其他要取模的式子,而递推式里又存在除法 那么一个很尴尬的事情出现了,假如a[i-1]=100%31=7 a[i]=(a[i-1]/2)%31 ...
- hdu1573-X问题-(扩展欧几里得定理+中国剩余定理)
X问题 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
随机推荐
- Windows反调试技术(上)
写在前面 在逆向工程中为了防止破解者调试软件,通常都会在软件中采用一些反调试技术来防破解.下面就是一些在逆向工程中常见的反调试技巧与示例. BeingDebuged 利用调试器加载程序时调试器会通过C ...
- 老板让我重构项目,我想首先应该服务治理---eureka服务治理深入浅出
目录 什么是服务治理 Eureka调用过程 Eureka单机注册 Eureka 单机启动 单机注册 集群注册 客户调用 Eureka集群注册 idea 如何同一个项目启动多次 Eureka自我保护 为 ...
- 低代码平台--基于surging开发微服务编排流程引擎构思
前言 微服务对于各位并不陌生,在互联网浪潮下不是在学习微服务的路上,就是在使用改造的路上,每个人对于微服务都有自己理解,有用k8s 就说自己是微服务,有用一些第三方框架spring cloud, du ...
- 论文翻译:Conv-TasNet: Surpassing Ideal Time–Frequency Magnitude Masking for Speech Separation
我醉了呀,当我花一天翻译完后,发现已经网上已经有现成的了,而且翻译的比我好,哎,造孽呀,但是他写的是论文笔记,而我是纯翻译,能给读者更多的思想和理解空间,并且还有参考文献,也不错哈,反正翻译是写给自己 ...
- 33.2.NIO
4.1概述[理解] BIO Blocking IO,阻塞型IO NIO No Blocking IO,非阻塞型IO 阻塞IO的弊端 在等待的过程中,什么事也做不了 非阻塞IO的好处 不需要一直等待,当 ...
- 15.Git
1.Git介绍 1.1版本控制(理解) 无论是代码编写,还是文档编写,我们都会遇到对文档内容反复修改的情况 1.2开发中存在的问题(理解) 程序员小明负责的模块就要完成了,就在即将提交发布之前的一瞬间 ...
- ansible-一键完成LNMP架构_期中架构
ansible-一键完成LNMP架构 ansible剧本托管地址 https://github.com/Gshelldong/ansible.git 网站架构图 ansible一键完成lnmp架构 a ...
- 怎样使用yum-cron为CentOS7自动更新重要的安全补丁
怎样使用yum-cron为CentOS自动更新重要的安全补丁 2017年4月19日 | 分类: [技术] 参考:https://linux.die.net/man/8/yum-cron参考:http: ...
- shell进阶之tree、pstree、lsof命令详解
一.tree命令详解: 主要功能是创建文件列表,将所有文件以树的形式列出来 -a 显示所有文件和目录. -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合. -C 在文件和目录清单加上色彩, ...
- 一些固化了的语音识别模块demo, 手机重力传感器获取
helloH5 这个软件里面有好多这个东东哦