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. How to disable Microsoft Compatibility Telemetry

    Issue: How to disable Microsoft Compatibility Telemetry (CompatTelRunner.exe)?   Option : Disable Mi ...

  2. JDK8 新特性流式数据处理

    https://blog.csdn.net/canot/article/details/52957262

  3. SSO单点登录原理

    一.单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关 ...

  4. Redis分布式锁(ServiceStack.Redis实现)

    1.设计思路 由于Redis是单线程模型,命令操作原子性,所以利用这个特性可以很容易的实现分布式锁.A用户端在Resdis写入1个KEY,其他的用户无法写入这个KEY,实现锁的效果.A用户使用完成后释 ...

  5. 在ionic2中集成swiper插件

    1. 下载官方的js和css文件分别放在assets下的js和css文件夹,然后在index.html中引入 <!DOCTYPE html> <html lang="en& ...

  6. Python交互图表可视化Bokeh:7. 工具栏

    ToolBar工具栏设置 ① 位置设置② 移动.放大缩小.存储.刷新③ 选择④ 提示框.十字线 1. 位置设置 import numpy as np import pandas as pd impor ...

  7. themeleaf跳转锚链接

    <a class="lianjie3" th:href="@{/}+'#requires'"></a>

  8. HDU-2032解题报告

    Hdu-2032解题报告题意:实现给定行数的杨辉三角的输出. 杨辉三角的特点:每一行数据的开头和结尾是1,然后其他的数据是由其上一个数据与其左上角的数据之和组成11 11 2 11 3 3 11 4 ...

  9. vue源码的构建

    一.vue构建的基本了解 1,开始学习vue的源码的学习,vue.js是基于rollup构建的 它的配置在 scripts下面 rollup是webpack的简小版针对于js进行压缩的,没有提供复杂的 ...

  10. The path is not a valid path to the xxx kernel header

    在安装vmtools时无意中出现了这样的问题 1.gcc错误 Searching for GCC- The path "" is not valid path to the gcc ...