首先这个题需要dp.dp[i]=C(x[i]+y[i],x[i])-Σdp[j]*C(x[i]-x[j]+y[i]-y[j],x[i]-x[j])(x[i]>=x[j],y[i]>=y[j])。

然后就是喜闻乐见的lucas+CRT.

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define maxn 1000050
using namespace std;
],ans[],inv1[][maxn],inv2[][maxn],up,f[],a[];
struct pnt
{
    long long x,y;
}pt[];
bool cmp(pnt x,pnt y)
{
    if (x.y!=y.y) return x.y<y.y;
    return x.x<y.x;
}
long long f_pow(long long x,long long y,long long mod)
{
    ,base=x;
    while (y)
    {
        ) ans=(ans*base)%mod;
        base=(base*base)%mod;
        y>>=;
    }
    return ans;
}
void get_mod(long long type)
{
    up=type;
    )
    {
        p[]=;inv1[][]=;inv2[][]=;
        ;i<=p[]-;i++)
        {
            inv1[][i]=inv1[][i-]*i%p[];
            inv2[][i]=f_pow(inv1[][i],p[]-,p[]);
        }
    }
    else
    {
        p[]=;p[]=;p[]=;p[]=;
        ;i<=;i++)
        {
            inv1[i][]=;inv2[i][]=;
            ;j<=p[i]-;j++)
            {
                inv1[i][j]=inv1[i][j-]*j%p[i];
                inv2[i][j]=f_pow(inv1[i][j],p[i]-,p[i]);
            }
        }
    }
}
long long comb(long long n,long long m,long long p,long long type)
{
    ;
    return inv1[type][n]*inv2[type][m]%p*inv2[type][n-m]%p;
}
long long lucas(long long n,long long m,long long p,long long type)
{
    ;
    return comb(n%p,m%p,p,type)*lucas(n/p,m/p,p,type)%p;
}
long long CRT()
{
    ;
    ;i<=up*up;i++)
        ret=(ret+a[i]*(mod/p[i])%mod*f_pow(mod/p[i],p[i]-,p[i])%mod)%mod;
    return ret%mod;
}
long long get_C(long long n,long long m)
{
    ;i<=up*up;i++) a[i]=lucas(n,m,p[i],i);
    return CRT();
}
int main()
{
    scanf("%lld%lld%lld%lld",&n,&m,&t,&mod);
    ;i<=t;i++) scanf("%d%d",&pt[i].x,&pt[i].y);
    ) get_mod(););
    sort(pt+,pt+t+,cmp);t++;pt[t].x=n;pt[t].y=m;
    ;i<=t;i++)
    {
        f[i]=get_C(pt[i].x+pt[i].y,pt[i].x);
        ;j<=i-;j++)
        {
            if (pt[j].x<=pt[i].x && pt[j].y<=pt[i].y)
                f[i]=(f[i]-f[j]*get_C(pt[i].x-pt[j].x+pt[i].y-pt[j].y,pt[i].x-pt[j].x)%mod+mod)%mod;
        }
    }
    printf("%lld\n",(f[t]+mod)%mod);
    ;
}

BZOJ 3782 上学路线的更多相关文章

  1. BZOJ 3782: 上学路线 [Lucas定理 DP]

    3782: 上学路线 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 192  Solved: 75[Submit][Status][Discuss] ...

  2. BZOJ 1266 上学路线route(最小割)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1266 题意:给出一个无向图,每条边有长度和代价.求出1到n的最短路.之后删掉一些边使得1 ...

  3. BZOJ 1266: [AHOI2006]上学路线route(最短路+最小割)

    第一问最短路.第二问,先把最短路的图建出来(边(u,v)满足d[s->u]+d[v->t]+d(u,v)==最短路径长度,就在图中,可以从源点和汇点分别跑一次最短路得到每个点到源点和汇点的 ...

  4. codevs2693 上学路线(施工)

    难度等级:黄金 2693 上学路线(施工) 题目描述 Description 问题描述 你所在的城市街道好像一个棋盘,有a条南北方向的街道和b条东西方向的街道. 南北方向a条街道从西到东依次编号为1到 ...

  5. BZOJ_1266_[AHOI2006]上学路线route_最小割

    BZOJ_1266_[AHOI2006]上学路线route_最小割 Description 可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信 ...

  6. BZOJ 1266: [AHOI2006]上学路线route

    题目描述 可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信息学奥林匹克竞赛小组才发现每天上学的乘车路线不一定是最优的. 可可:"很 ...

  7. [BZOJ 1266][AHOI2006]上学路线(最短路+最小割)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1266 分析: 很简单的题目,容易想到就是把所有的最短路径挑出来,然后在这个图里跑最小割 ...

  8. bzoj1266: [AHOI2006]上学路线route

    最短路+最小割 首先如何使最短路变长?就是要每一条最短路都割一条边. 我们求出每个点到点1和点n的距离,就可以知道哪些边在最短路上(一开始没有想到求到0和n的距离,想用floyd,但是n=500,怕超 ...

  9. codeforces #313 div1 C

    同BZOJ 3782 上学路线 QAQ 还比那个简单一点 把坐标(1,1)-(n,m)平移成(0,0)-(n-1,m-1) 设dp[i]表示从(1,1)出发第一次经过障碍且到达第i个障碍的方案数 首先 ...

随机推荐

  1. JQuery插件定义

    一:导言 有些WEB开发者,会引用一个JQuery类库,然后在网页上写一写$("#"),$("."),写了几年就对别人说非常熟悉JQuery.我曾经也是这样的人 ...

  2. 正则表达式校验URL

    正则表达式: var match = /^((ht|f)tps?):\/\/([\w-]+(\.[\w-]+)*\/?)+(\?([\w\-\.,@?^=%&:\/~\+#]*)+)?$/; ...

  3. React业务实践

    总结自:http://reactjs.cn/react/docs/thinking-in-react-zh-CN.html 当接到一个需求时,如何用react来实现? 以下几个步骤做参考. 第一步:把 ...

  4. CSS书写规范

    一.CSS书写顺序 1.位置属性(position,top,right,z-index,display,float等) 2.大小(width,height,padding,margin) 3.文字系列 ...

  5. 插入排序---直接插入排序算法(Javascript版)

    将n个元素的数列分为已有序和无序两个部分. 数列:{a1,a2,a3,a4,…,an} 将该数列的第一元素视为有序数列,后面都视为无序数列: {{a1},{a2,a3,a4,…,an}} 将无序数列中 ...

  6. 找做IT的男朋友会不会没有隐私

    找做IT的男朋友会不会没有隐私你不觉得自己在网上不断的“秀”啊,“晒”啊的行为才是根本所在吗?你应该怕自己的这种行为才对吧-—————————————————————————————————————— ...

  7. POJ 3628 Bookshelf 2(01背包)

    Bookshelf 2 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9488   Accepted: 4311 Descr ...

  8. java,for循环中的穷举、迭代、冒泡例题

    1.100以内与7相关的数 //100以内与7相关的数: public static void main1(String[] args) { for(int i=1;i<=100;i++){ i ...

  9. linux type命令用法_转

    转自:http://codingstandards.iteye.com/blog/831504 在脚本中type可用于检查命令或函数是否存在,存在返回0,表示成功:不存在返回正值,表示不成功. $ t ...

  10. PLSQL_数据泵导入导出数据Impdp/ Expdp(概念)

    2014-08-31 Created By BaoXinjian