UESTC - 1167 一句话题意
---恢复内容开始---
题目链接: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 一句话题意的更多相关文章
- UESTC 1599 wtmsb【优先队列+排序】
题目链接:UESTC 1599 wtmsb 题意:给你一组数,每一次取出两个最小的数,将这两个数的和放入这组数中,直到这组数只剩下一个,求最后剩下那个数的大小! 分析:比赛的时候首先我就看到这道题数据 ...
- hdu 4352 XHXJ's LIS 数位DP+最长上升子序列
题目描述 #define xhxj (Xin Hang senior sister(学姐))If you do not know xhxj, then carefully reading the en ...
- codevs 1490 【CTSC2008】 网络管理
题目链接:网络管理 好久没写这种类型的题了--手都生了-- 一句话题意:树上带修改的区间\(k\)大数.这题面怎么有点眼熟 显然树上的题目我们可以先在序列上考虑一下.区间带修改的区间\(k\)大数有两 ...
- [POJ2104]K-th Number
K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 34048 Accepted: 10810 Ca ...
- UOJ#246. 【UER #7】套路
题目传送门 官方题解传送门 一句话题意的话就是给定一个序列,从中找出至少$k$个连续的元素形成子序列,使得子序列中任意两个元素差值的最小值于其长度-1的乘积最大. 题目中给出了$ 1 \leq a_i ...
- 开始做POI啦...
库 为了效率搞了这么一个库: 现在版本号1.14(一月十四日更新版本囧..) http://pan.baidu.com/s/1c0SoGfu [source] http://pan.baidu.com ...
- [1015][JSOI2008]星球大战starwar(并查集)
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 2124 Solved: 909[Submit] ...
- 【BZOJ1006】【HNOI2008】神奇的国度(弦图染色)
1006: [HNOI2008]神奇的国度 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1467 Solved: 603[Submit][Stat ...
- 他们在军训,我在搞 OI(四)
(怎么自动变成两天一更了?) ——因为我菜啊 T_T Day 5 今天上午刷得爽啊!5 道 NOIP,前四题直接 1A,然而最后一题还是 WA 了一发才 A... 第一题是个简单的贪心,题意大概是 n ...
随机推荐
- vue为app做h5页面,如何做到同域名对应不同版本的h5代码
1.当我们在做混合开发的时候,app端可以有无数多个版本,一般情况h5页面只有一套代码.应该如何部署多套代码呢? 2.业务场景 当出现这种情况的时候,其实前端可以部署多套代码.比如: www.stat ...
- [日常工作]GS使用安装盘修改密码后的处理
1. GS服务器端有时候需要修改 9999 的用户密码.但是修改完密码之后有几个注意事项: 一般有两个可以修改注册的地方: 使用setup里面的修改用户密码 修改完密码之后要手工注册一下数据库实例 也 ...
- ionic3.x开发小坑记录(一)
自定义font的时候,在assets中创建的文件夹名字别用fonts,会与ionic默认样式冲突,在浏览器中调试是正常的,到手机上就出问题了. 在html中写img的src直接如图 assets前面 ...
- 【Java】 内部类
[Java]内部类 可以将一个类的定义放在另一个类的定义内部,这就是内部类. 使用内部类的的原因主要有三点: 内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据. 内部类可以对同一个包中的 ...
- linux 为tomcat指定jdk
Linux为Tomecat指定JDK 在搭建Jenkin+Sonar集成时,由于系统环境配置了jdk1.7,但是jenkins在安装sonar的插件时,需要jdk1.8.,所以需要在Tomcat指 ...
- BZOJ1774[USACO 2009 Dec Gold 2.Cow Toll Paths]——floyd
题目描述 跟所有人一样,农夫约翰以着宁教我负天下牛,休叫天下牛负我的伟大精神,日日夜夜苦思生 财之道.为了发财,他设置了一系列的规章制度,使得任何一只奶牛在农场中的道路行走,都 要向农夫约翰上交过路费 ...
- 【ZOJ2276】Lara Croft(bfs)
BUPT2017 wintertraining(16) #4 D ZOJ - 2276 题意 n个数字绕成环,有两个指示数字的方块,每次可以顺时针或逆时针移动其中一个,步数是它当前位置的数字a[i], ...
- Mysql 主从服务器数据同步
安装2台windows Server 服务器,分别安装Mysql,配置环境变量,完成安装确认在CMD窗口可以使用Mysql命令 在Master服务器上创建同步账号,确保Slave服务器能访问Maste ...
- Spark安装与介绍
1. Scala的安装 注意点:版本匹配的问题, Spark 1.6.2 -- Scala2.10 Spark 2.0.0 -- Scala2.11 https://www.scala-lang.or ...
- centos6.5下修改文件夹权限和用户名用户组
0.说明 Linux系统下经常遇到文件或者文件夹的权限问题,或者是因为文件夹所属的用户问题而没有访问的权限.根据我自己遇到的情况,对这类问题做一个小结. 在命令行使用命令"ll"或 ...