---恢复内容开始---

题目链接:https://vjudge.net/problem/UESTC-1167

请问从n*n的正方形左下角走到右上角且不越过对角线的情况总数模m的结果~

分析:

  还记得高中的组合数学吗?

  我是不记得了,导致卡了很久。首先看没有限制的情况,即n*n的方格从左下角到右上角有多少条路径(每次只能向上或向右)。无论怎么走,总步数一定为n+n=2n,只要决定了向右走的位置,向上走的路线就自然出来了,那么就是2n个步数里选择n个向右的步数,所以答案为C(2n,n)。现在不允许越过对角线,那么我们可以看作有至少一条向右的步数位于对角线的一侧,所以我们能够选择的向右的路线就只剩n-1个了,即此情况下违规的数目为C(2n,n-1)。于是,答案为C(2n,n)-C(2n,n-1)

  公式是列出来了,可这里还有个大组合数取模的问题。这样就需要Lucas定理:C(n,m)%p=C(n/p,m/p)*C(n%p,m%p)%p(递归操作)。p一定得是素数,且不大于105。计算组合数时,可以利用p为素数的性质,C(n,m) mod p=n! / (m!(n-m)!)mod p,显然是除法求模,根据费马小定理,已知(a, p) = 1,则 ap-1 ≡ 1 (mod p),  所以 a*ap-2 ≡ 1 (mod p),也就是 (m!(n-m)!)的逆元为 (m!(n-m)!)p-2 

  

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long LL;
LL p;
LL q_mod(LL a,LL b){
LL res = ;
while(b>){
if(b&) res = (res*a)%p;
a = (a*a)%p;
b >>= ;
}
return res%p;
}
LL Comb(LL n,LL m){
LL res1 = ,res2 = ;
for(int i=m;i>=;i--){
res1 = (res1*i)%p;
}
for(int i=n;i>=n-m+;i--){
res2 = (res2*i)%p;
}
return (res2*q_mod(res1,p-))%p;
} LL lucas(LL n,LL m){
if(m==) return ;
return (Comb(n%p,m%p)*lucas(n/p,m/p))%p;
} int main(){
int t;
LL n;
scanf("%d",&t);
while(t--){
cin>>n>>p;
cout<<(lucas(*n,n)-lucas(*n,n-)+p)%p<<endl;
} return ;
}

  

---恢复内容结束---

UESTC - 1167 一句话题意的更多相关文章

  1. UESTC 1599 wtmsb【优先队列+排序】

    题目链接:UESTC 1599 wtmsb 题意:给你一组数,每一次取出两个最小的数,将这两个数的和放入这组数中,直到这组数只剩下一个,求最后剩下那个数的大小! 分析:比赛的时候首先我就看到这道题数据 ...

  2. hdu 4352 XHXJ's LIS 数位DP+最长上升子序列

    题目描述 #define xhxj (Xin Hang senior sister(学姐))If you do not know xhxj, then carefully reading the en ...

  3. codevs 1490 【CTSC2008】 网络管理

    题目链接:网络管理 好久没写这种类型的题了--手都生了-- 一句话题意:树上带修改的区间\(k\)大数.这题面怎么有点眼熟 显然树上的题目我们可以先在序列上考虑一下.区间带修改的区间\(k\)大数有两 ...

  4. [POJ2104]K-th Number

    K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 34048   Accepted: 10810 Ca ...

  5. UOJ#246. 【UER #7】套路

    题目传送门 官方题解传送门 一句话题意的话就是给定一个序列,从中找出至少$k$个连续的元素形成子序列,使得子序列中任意两个元素差值的最小值于其长度-1的乘积最大. 题目中给出了$ 1 \leq a_i ...

  6. 开始做POI啦...

    库 为了效率搞了这么一个库: 现在版本号1.14(一月十四日更新版本囧..) http://pan.baidu.com/s/1c0SoGfu [source] http://pan.baidu.com ...

  7. [1015][JSOI2008]星球大战starwar(并查集)

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 2124  Solved: 909[Submit] ...

  8. 【BZOJ1006】【HNOI2008】神奇的国度(弦图染色)

    1006: [HNOI2008]神奇的国度 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 1467  Solved: 603[Submit][Stat ...

  9. 他们在军训,我在搞 OI(四)

    (怎么自动变成两天一更了?) ——因为我菜啊 T_T Day 5 今天上午刷得爽啊!5 道 NOIP,前四题直接 1A,然而最后一题还是 WA 了一发才 A... 第一题是个简单的贪心,题意大概是 n ...

随机推荐

  1. Windows下 使用命令行的方式 设置主机的ip地址. 以及设置多ip地址的方法

    1. 首先要查看一下网卡的设备名称 netsh interface ip show interfaces 结果为: 记住当前的网卡名称 进行后续操作. 其实 也可以通过 ipconfig /all 的 ...

  2. SQLPLUS SQLCMD连接管理oracle sqlserver的简单用法

    1. SQLPLUS 与plsql一样,其实不需要安装oracle客户端,只要是有sqlplus的即时客户端 以及将目录放置到path或者是相应的oralce_home变量中即可. 打开运行cmd s ...

  3. scope 前缀开头的方法

    https://learnku.com/docs/laravel/5.6/eloquent/1403 本地范围 本地范围允许定义通用的约束集合以便在应用中复用. 例如, 你可能经常需要获取「受欢迎的」 ...

  4. hive外部表

    创建外部表.数据从HDFS获取  只是建立了链接,hdfs中的数据丢失,表中数据也丢失;hdfs数据增加,表中数据也增加 上传文件 创建外部表 删除文件 执行查询语句,发现少了

  5. python之tkinter使用-多选框实现开关操作

    # tkinter的Checkbutton实现开关操作 import tkinter as tk root = tk.Tk() root.title('开关') root.geometry('170x ...

  6. jdk1.8 HashMap扩容原理详解

    JDK1.7中,resize时,index取得时,全部采用重新hash的方式进行了.JDK1.8对这个进行了改善. 以前要确定index的时候用的是(e.hash & oldCap-1),是取 ...

  7. Django-website 程序案例系列-5 模态对话框实现提交数据

    html代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  8. Lights inside a 3d Grid UVA - 11605(概率)

    题意: 给出一个n * m * h的空间 每次任意选择两个点  使得在以这两个点连线为对角线的空间的点的值 取反  (初始为0) 求经过k次操作后最后有多少点的值为1 解析: 遇到坐标分维去看  把三 ...

  9. MT【224】反解系数

    (2011安徽省赛)$f(x)=ax^3+bx+c(a,b,c\in R),$当$0\le x \le 1$时,$0\le f(x)\le 1$,求$b$的可能的最大值. 提示:取三个点$f(0),f ...

  10. luogu1850 [NOIp2016]换教室 (floyd+dp)

    首先floyd求出每两点间的距离(注意自己到自己的距离要设成0) 然后就是dp了 一开始照着Lifeguards的样子,钦定了一下i这个点一定要选,然后发现复杂度不对,还想了好长时间优化 然后一翻题解 ...