T1:

题目描述

你正在使用过时的浏览器,洛谷暂不支持。 请 升级浏览器
以获得更好的体验!

Bob 来到了一个 $n \times m$ 的网格中,网格里有 $k$ 个豆子,第 $i$ 个豆子位于 $(x_i, y_i)$,保证没有两个豆子在同一个格子里,$(1, 1)$ 处和 $(n, m)$ 处没有豆子。

Bob 从左上角 $(1, 1)$ 出发,目的地是右下角 $(n, m)$。每次以向右或向下走一步,也就是说他到达终点时一共会走 $n + m - 2$ 步。

贪吃的 Bob 决定吃掉所有格子的豆子,他想知道是否存在多少条路径,使得他可以经过所有的豆子。由于答案很大,你只需要输出答案模 $10^9 + 7$ 的结果即可。

输入输出格式

输入格式:

第一行三个整数 $n, m, k$,意义如上所述。

接下来 $k$ 行,每行两个整数 $x_i, y_i(1 \leq x_i \leq n, 1 \leq y_i \leq m)$,意义如上所述。2018-10-14

输入输出样例

输入样例#1:

3 4 1
1 2
输出样例#1:

6
输入样例#2:

3 4 1
2 2
输出样例#2:

6

说明

对于 $30\%$ 的数据,满足 $2 \leq n, m \leq 100$。

对于 $60\%$ 的数据,满足 $2 \leq n, m \leq 1000$。

对于 $100\%$ 的数据,满足 $2 \leq n, m \leq 10^5, 0 \leq k \leq \min(n \times m - 2, 10^5)$。

 

解题思路:

由于要吃掉所有的豆子且只能向右向下走,那么对于每一个豆子来说,如果在当前豆子的严格左下方处仍有豆子的话肯定无解,因为不可能向左走。

因此我们可以以每个豆子的X坐标作为第一关键字,Y坐标作为第二关键字对豆子进行排序。

接下来考虑如何计算方案:

可以想到方案是由乘法原理得到的,即每个当前点去往下一个点的方案数的总乘积。

对于60%的数据我们可以用dp[i][j]表示到由(1,1)到(i,j)的方案数,直接计算即可。

100%的数据:将dp[i][j]的表打出来可以发现是杨辉三角的变形,也就是组合数,由于数据范围较大考虑用乘法逆元计算组合数。

#include<bits/stdc++.h>
using namespace std;
#define re register int
#define ll long long
#define INF 0x3f3f3f3f
#define maxn 100009
#define maxm 1009
inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+(ll)(ch-'');ch=getchar();}
return x*f;
}
int n,m,k,tot;
struct node
{
int x,y;
}p[maxn];
ll ans,base; bool comp(node a,node b)
{
if(a.x==b.x)
return a.y<b.y;
return a.x<b.x;
} ll Quick_mul(ll a,ll b)
{
ll sum=;
while(b)
{
if(b&)
sum=(sum*a)%base;
a=(a*a)%base;
b>>=;
}
return sum%base;
} ll inv(ll x)
{
return Quick_mul(x,base-)%base;
} ll Cal(ll n,ll m)
{
ll a=,b=;
for(ll i=n-m+;i<=n;i++)
a=(a*i)%base;
for(ll j=;j<=m;j++)
b=(b*j)%base;
return a*inv(b)%base;
} int main()
{
// freopen("T1.in","r",stdin);
// freopen("T1.out","w",stdout);
n=read(),m=read(),k=read(),base=1e9+;
if(k>n+m-)
{
puts("");
return ;
}
p[].x=,p[].y=;
for(int i=;i<=k;i++)
p[i].x=read(),p[i].y=read();
sort(p+,p++k,comp);
p[++k].x=n,p[k].y=m;
ans=;
for(int i=;i<=k;i++)
{
if(p[i].y<p[i-].y)
{
puts("");
return ;
}
ll x=(ll)p[i].x-p[i-].x+,y=(ll)p[i].y-p[i-].y+;
ans=ans*Cal(x+y-,y-)%base;
}
printf("%lld\n",ans);
fclose(stdin);
fclose(stdout);
return ;
}

  

  

Luogu 2018 秋令营 Test 2的更多相关文章

  1. [转帖] 国产x86-海光禅定 2018年营收过亿?

    中科曙光:全年业绩稳健,海光芯片营收过亿 X86服务器市场Intel占据绝对优势:X86处理器已经成为全球最广泛使用的处理器架构之一,尤其是在PC和服务器领域,其中在处理器市场的份额高达90%以上.中 ...

  2. 【微软2014实习生及秋令营技术类职位在线測试】题目2 : K-th string

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB Description Consider a string set that each of them consists of ...

  3. 微软2014实习生及秋令营技术类职位在线测试(题目1 : String reorder)

    题目1 : String reorder 时间限制:10000ms 单点时限:1000ms 内存限制:256MB Description For this question, your program ...

  4. Luogu 2017 Autumn Camping 游记

    颓得不行的我到D2才想起来自己可以写一篇low得不能再low的游记,然后就动笔了...... Day0 愉快地看着三联,想着别人放一天我放四天的悠闲生活,内心甚是平静.然而晚上回到家就开始浪了,看完了 ...

  5. [转帖]浪潮信息最大供应商英特尔(Intel):2018 年采购额 145.76 亿元

    浪潮信息最大供应商英特尔(Intel):2018 年采购额 145.76 亿元 https://t.cj.sina.com.cn/articles/view/3172142827/bd130eeb01 ...

  6. csp-j2019游记

    我一pj蒟蒻这点水平还来写游记? 算了,毕竟是第一次,记录一下吧 noip->csp 话说我跟竞赛是不是天生八字不合啊...... 小学的时候学小奥,等我开始报名比赛,当时似乎所有竞赛都被叫停了 ...

  7. Reduce inversion count 求最小逆序数

    本问题出自:微软2014实习生及秋令营技术类职位在线测试 (Microsoft Online Test for Core Technical Positions) Description Find a ...

  8. String reorder

    本问题出自:微软2014实习生及秋令营技术类职位在线测试 (Microsoft Online Test for Core Technical Positions) Description For th ...

  9. NOIP2016提高组初赛(C++语言)试题 个人的胡乱分析 Part 2.

    洛谷秋令营day1模拟赛原地爆炸,心态崩了.于是打算写一下初赛题放松一下. 上次胡乱分析到了选择题,这次我想说说后面的题. 问题求解 T1.有一个1x8的方格图形,黑白两色填涂每个方格,两个黑格并不能 ...

随机推荐

  1. 008-Python-模块

    1.模块 1.1什么是模块 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀: 模块分为: 内置模块(内部定义的如time,os,sys等) 第三方模块(需要安装 ...

  2. .net core 发布后提示Start error

    纪录篇: 发布Core版本的项目后一直提示error,通过网络查询资料后确认梳理问题的逻辑   1.验证环境是否支持,开发环境及server环境        参考:https://docs.micr ...

  3. Spring MVC基础知识整理➣数据校验与格式化

    概述 将view中Form的数据提交到后台之后,后台如何验证数据的有效性?在这里Spring MVC提供了相应的Hibernate类包(hibernate-validator-4.3.1.Final. ...

  4. nginx-fastcgi 反向代理

    Nginx处理php页面 用fpm-server  基于fastcgi模块实现 Ngx_http_proxy_module  只能反代后端http server的主机 Ngx_fastcgi_prox ...

  5. 移动端iscroll实现日期选择

    哎,说多了都是泪: 引入相关JS文件 <script type="text/javascript" src="js/jquery-1.9.1.min.js" ...

  6. 关于window.open窗口的resize事件

    jQuery 事件 - resize() 方法 当调整浏览器窗口的大小时,发生 resize 事件. resize() 方法触发 resize 事件,或规定当发生 resize 事件时运行的函数. & ...

  7. 51Nod1766 树上的最远点对 ST表 LCA 线段树

    原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1766.html 题目传送门 - 51Nod1766 题意 n个点被n-1条边连接成了一颗树,给出a~ ...

  8. 51Nod1601 完全图的最小生成树计数 Trie Prufer编码

    原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1601.html 题目传送门 - 51Nod1601 题意 题解 首先我们考虑如何求答案. 我们将所有 ...

  9. LR两种录制模式的区别

    loadrunner的录制模式分为如下两种录制模式: HTML-based script,也称为高层录制: URL-based script,也称为底层录制. 两种录制模式的区别:1)脚本不同:高层录 ...

  10. 【Java】idea找不到符号找不到类,但是却没有错误

    编译错误,Ctrl+Shift+F9 将提示没有符号类的文件打开,右键单独编译一次,再重新打包即可解决: 特别说明:在Java的集成开发环境中,比如Eclipse.IDEA中,有常常有三种与编译相关的 ...