如此显然的组合数我把它当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(卢卡斯定理&&中国剩余定理)的更多相关文章

  1. 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 ...

  2. 洛谷P2480 [SDOI2010]古代猪文(卢卡斯定理+中国剩余定理)

    传送门 好吧我数学差的好像不是一点半点…… 题目求的是$G^{\sum_{d|n}C^d_n}mod\ 999911659$ 我们可以利用费马小定理$a^{k}\equiv a^{k\ mod\ (p ...

  3. 【Lucas组合数定理+中国剩余定理】Mysterious For-HDU 4373

    Mysterious For-HDU 4373 题目描述 MatRush is an ACMer from ZJUT, and he always love to create some specia ...

  4. 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最后会得到一个同余 ...

  5. BZOJ1951 [Sdoi2010]古代猪文 【费马小定理 + Lucas定理 + 中国剩余定理 + 逆元递推 + 扩展欧几里得】

    题目 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久很久以前,在山的那 ...

  6. [bzoj2142]礼物(扩展lucas定理+中国剩余定理)

    题意:n件礼物,送给m个人,每人的礼物数确定,求方案数. 解题关键:由于模数不是质数,所以由唯一分解定理, $\bmod  = p_1^{{k_1}}p_2^{{k_2}}......p_s^{{k_ ...

  7. 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.. ...

  8. 逆元 exgcd 费马小定理 中国剩余定理的理解和证明

    一.除法取模逆元 如果我们要通过一个前面取过模的式子递推出其他要取模的式子,而递推式里又存在除法 那么一个很尴尬的事情出现了,假如a[i-1]=100%31=7 a[i]=(a[i-1]/2)%31 ...

  9. hdu1573-X问题-(扩展欧几里得定理+中国剩余定理)

    X问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

随机推荐

  1. Python设计模式知多少

    设计模式 设计模式是前辈们经过相当长的一段时间的试验和错误总结出来的最佳实践.我找到的资料列举了以下这些设计模式:工厂模式.抽象工厂模式.单例模式.建造者模式.原型模式.适配器模式.桥接模式.过滤器模 ...

  2. ES6学习-0 前言

    本菜鸟做了二十来年的程序开发了,前后台都写过,队伍也带过.大约是2000年左右,是用dephi 写后台CGI,所有的html,js,css基本都是混在CGI里输出到前台的,那时也没有明确的前后台的概念 ...

  3. gdb调试多线程多进程

    多进程调试 我们使用gdb调试程序,gdb的调试默认是调试父进程的,如果要做到对父进程和子进程都做到调试,所以附加了调试子进程的功能. 设置条件 如果让gdb可以同时调试多个程序,只需要设置follo ...

  4. ipmi配置方法-20200328

    ipmi配置错误-20200328[root@localhost home]# ipmitool lan set 1 ipsrc staticCould not open device at /dev ...

  5. mysql如何设置一个字段,里面是自增的序号(1,2,3,..........)。

    [遇到问题] [可忽略] 想把以前写的留言板搬到我的网站上去,所以要在Mysql上创建一个一mu一样的数据库,表单,字段..................... userid这个字段忘记了如何添加, ...

  6. qt利用QT designer构建第一个界面helloworld工程

    qt利用QT designer构建第一个界面helloworld工程原创ZJE_ANDY 发布于2017-04-07 20:25:28 阅读数 6613 收藏展开第一步:点击New Project 第 ...

  7. IT菜鸟之路由器基础配置(静态、动态、默认路由)

    路由器:连接不同网段的设备 企业级路由和家用级路由的区别: 待机数量不同(待机量) 待机量:同时接通的终端设备的数量 待机量的值越高,路由的性能越好 别墅级路由,表示信号好,和性能无关 交换机:背板带 ...

  8. 【转-备忘】scatter函数

    1.scatter函数原型 2.其中散点的形状参数marker如下: 3.其中颜色参数c如下: 4.基本的使用方法如下: #导入必要的模块 import numpy as np import matp ...

  9. python字典转bytes类型字典

    python字典转bytes类型字典import base64 import json 1. a={"Vod":{"userData":"{}&quo ...

  10. redis全解

    Redis全解 1.什么是Redis? Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到 ...