分析:转自http://blog.csdn.net/mengzhengnan/article/details/47031777

一点感想:其实这个题应该是可以想到的,但是赛场上并不会

dp[i]的定义很巧妙,容斥的思路也非常清晰

然后就是讨论lucas的用法,首先成立的条件是mod是素数

但是如果这个题mod很大,组合数取模感觉就不太可做了

我认为当mod很大时,n应该很小可以预处理,但是n很大时mod应该比较小,这样也可以预处理

如果n和mod都很大我就不会了。。。。

这个题在预处理的时候,同样需要预处理逆元,如果用费马小定理的话,比较慢是O(nlogmod)的

其实有更好的O(N)筛1到mod-1的算法

详情请参考:http://blog.miskcoo.com/2014/09/linear-find-all-invert

总的来说,赛场上没做出来还是太年轻

#include <algorithm>
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
typedef long long LL;
const int N = 1e2+;
const LL mod = ;
struct Node{
LL x,y;
bool operator<(const Node &rhs)const{
return x<rhs.x;
}
}p[N];
int r,kase;
LL n,m,dp[N],f[mod+],inv[mod+];
LL C(LL n, LL m){
if(m > n) return ;
return f[n]*inv[f[m]]%mod*inv[f[n-m]]%mod;
}
LL lucas(LL n, LL m){
if(m == ) return ;
return C(n % mod, m % mod) * lucas(n / mod, m / mod) % mod;
}
int main(){
f[]=f[]=inv[]=;
for(int i=;i<mod;++i){
f[i]=f[i-]*i%mod;
inv[i]=inv[mod%i]*(mod-mod/i)%mod;
}
while(~scanf("%I64d%I64d%d",&n,&m,&r)){
bool flag=false;
for(int i=;i<=r;++i){
scanf("%I64d%I64d",&p[i].x,&p[i].y);
if(p[i].x==n&&p[i].y==m)flag=true;
}
if(flag){
printf("Case #%d: 0\n",++kase);
continue;
}
sort(p+,p++r);
memset(dp,,sizeof(dp));
++r;p[r].x=n,p[r].y=m;
for(int i=;i<=r;++i){
LL tx=p[i].x-,ty=p[i].y-,a=-,b=-;
if((tx+ty)%||(*tx-ty)%)continue;
a=(*tx-ty)/;if(a<)continue;
b=(tx+ty)/-a;if(b<)continue;
dp[i]=lucas(a+b,a);
for(int j=;j<i;++j){
if(!dp[j])continue;
if(p[i].x==p[j].x||p[i].y<=p[j].y)continue;
tx=p[i].x-p[j].x,ty=p[i].y-p[j].y,a=-,b=-;
if((tx+ty)%||(*tx-ty)%)continue;
a=(*tx-ty)/;if(a<)continue;
b=(tx+ty)/-a;if(b<)continue;
if(a==&&b==)continue;
dp[i]=(dp[i]-dp[j]*lucas(a+b,a)%mod+mod)%mod;
}
}
printf("Case #%d: %I64d\n",++kase,dp[r]);
}
return ;
}

HDU5794 A Simple Chess 容斥+lucas的更多相关文章

  1. hdu5794 A Simple Chess 容斥+Lucas 从(1,1)开始出发,每一步从(x1,y1)到达(x2,y2)满足(x2−x1)^2+(y2−y1)^2=5, x2>x1,y2>y1; 其实就是走日字。而且是往(n,m)方向走的日字。还有r个障碍物,障碍物不可以到达。求(1,1)到(n,m)的路径条数。

    A Simple Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  2. hdu-5794 A Simple Chess(容斥+lucas+dp)

    题目链接: A Simple Chess Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Ot ...

  3. 【题解】CF559C C. Gerald and Giant Chess(容斥+格路问题)

    [题解]CF559C C. Gerald and Giant Chess(容斥+格路问题) 55336399 Practice: Winlere 559C - 22 GNU C++11 Accepte ...

  4. Codeforces Round #258 (Div. 2) 容斥+Lucas

    题目链接: http://codeforces.com/problemset/problem/451/E E. Devu and Flowers time limit per test4 second ...

  5. A Simple Chess---hdu5794(容斥+Lucas)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5794 题意:给你一个n*m的网格,问从(1, 1)走到(n, m)的方案数是多少,其中有r ...

  6. HDU 5794 A Simple Chess (容斥+DP+Lucas)

    A Simple Chess 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5794 Description There is a n×m board ...

  7. hdu_5794_A Simple Chess(lucas+dp)

    题目链接:hdu_5794_A Simple Chess 题意: 给你n,m,从(1,1)到(n,m),每次只能从左上到右下走日字路线,有k(<=100)的不能走的位置,问你有多少方案 题解: ...

  8. Luogu4640 BJWC2008 王之财宝 容斥、Lucas

    传送门 题意:有$N$种物品,其中$T$个物品有限定数量$B_i$,其他则没有限定.问从中取出不超过$M$个物品的方案数,对质数$P$取模.$N,M \leq 10^9 , T \leq 15 , P ...

  9. HDU 5794 A Simple Chess dp+Lucas

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5794 A Simple Chess Time Limit: 2000/1000 MS (Java/O ...

随机推荐

  1. POJ2442Sequence

    http://poj.org/problem?id=2442 题意 :就是输入m个数集,每个含n个数,求从每个集合取一个数后,按非降序输出前n小的和. 思路 : 本来打算是用几个for循环的,后来觉得 ...

  2. 表单插件——form

    表单插件——form 通过表单form插件,调用ajaxForm()方法,实现ajax方式向服务器提交表单数据,并通过方法中的options对象获取服务器返回数据,调用格式如下: $(form). a ...

  3. 套题T7

    P4712 铺瓷砖 时间: 1000ms / 空间: 65536KiB / Java类名: Main   描述

  4. cojs 安科赛斯特 题解报告

    QAQ 从IOI搬了一道题目过来 官方题解貌似理论上没有我的做法优,我交到BZOJ上也跑的飞快 结果自己造了个数据把自己卡成了4s多,真是忧桑的故事 不过貌似原题是交互题,并不能离线 说说我的做法吧 ...

  5. python3.0与2.x之间的区别

    python3.0与2.x之间的区别: 1.性能 Py3.0运行pystone benchmark的速度比Py2.5慢30%.Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可以取得很好 ...

  6. Java学习笔记之:Java数据类型的转换

    一.介绍 数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换:强制类型转换则必须在代码中声明,转换顺序不受 ...

  7. Android 在Intent中传递接口

    总结:在Activity中不能用intent传递匿名接口,原因如下:Activity A中生成了匿名接口M, 这个接口的引用就在组Activity A中,Activity A会禁止接口M 序列化.因为 ...

  8. android从应用到驱动之—camera(1)---程序调用流程

    一.开篇 写博客还得写开篇介绍,可惜,这个不是我所擅长的.就按我自己的想法写吧. 话说camera模块,从上层到底层一共包含着这么几个部分: 1.apk------java语言 2.camera的ja ...

  9. Intellij IDEA 创建消息驱动Bean - 接收JMS消息

    除了同步方式的调用之外,有时还需要异步调用,用来处理不需要即时处理的信息,例如短信.邮件等,这需要使用EJB中的独特组件——消息驱动Bean(Message-Driven Bean,MDB),它提供了 ...

  10. flex布局全解析

    前言 很长一段时间, 我知道有flex这个布局方式, 但是始终没有去学它. 3点原因: 感觉还比较新, 担心兼容性不好. 普通的布局方式能满足我的绝大多数需求. 好像蛮复杂的. 最近由于开发需要, 学 ...