Luogu 2018 秋令营 Test 2
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
输入输出样例
3 4 1
1 2
6
3 4 1
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的更多相关文章
- [转帖] 国产x86-海光禅定 2018年营收过亿?
中科曙光:全年业绩稳健,海光芯片营收过亿 X86服务器市场Intel占据绝对优势:X86处理器已经成为全球最广泛使用的处理器架构之一,尤其是在PC和服务器领域,其中在处理器市场的份额高达90%以上.中 ...
- 【微软2014实习生及秋令营技术类职位在线測试】题目2 : K-th string
时间限制:10000ms 单点时限:1000ms 内存限制:256MB Description Consider a string set that each of them consists of ...
- 微软2014实习生及秋令营技术类职位在线测试(题目1 : String reorder)
题目1 : String reorder 时间限制:10000ms 单点时限:1000ms 内存限制:256MB Description For this question, your program ...
- Luogu 2017 Autumn Camping 游记
颓得不行的我到D2才想起来自己可以写一篇low得不能再low的游记,然后就动笔了...... Day0 愉快地看着三联,想着别人放一天我放四天的悠闲生活,内心甚是平静.然而晚上回到家就开始浪了,看完了 ...
- [转帖]浪潮信息最大供应商英特尔(Intel):2018 年采购额 145.76 亿元
浪潮信息最大供应商英特尔(Intel):2018 年采购额 145.76 亿元 https://t.cj.sina.com.cn/articles/view/3172142827/bd130eeb01 ...
- csp-j2019游记
我一pj蒟蒻这点水平还来写游记? 算了,毕竟是第一次,记录一下吧 noip->csp 话说我跟竞赛是不是天生八字不合啊...... 小学的时候学小奥,等我开始报名比赛,当时似乎所有竞赛都被叫停了 ...
- Reduce inversion count 求最小逆序数
本问题出自:微软2014实习生及秋令营技术类职位在线测试 (Microsoft Online Test for Core Technical Positions) Description Find a ...
- String reorder
本问题出自:微软2014实习生及秋令营技术类职位在线测试 (Microsoft Online Test for Core Technical Positions) Description For th ...
- NOIP2016提高组初赛(C++语言)试题 个人的胡乱分析 Part 2.
洛谷秋令营day1模拟赛原地爆炸,心态崩了.于是打算写一下初赛题放松一下. 上次胡乱分析到了选择题,这次我想说说后面的题. 问题求解 T1.有一个1x8的方格图形,黑白两色填涂每个方格,两个黑格并不能 ...
随机推荐
- How to disable Microsoft Compatibility Telemetry
Issue: How to disable Microsoft Compatibility Telemetry (CompatTelRunner.exe)? Option : Disable Mi ...
- JDK8 新特性流式数据处理
https://blog.csdn.net/canot/article/details/52957262
- SSO单点登录原理
一.单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关 ...
- Redis分布式锁(ServiceStack.Redis实现)
1.设计思路 由于Redis是单线程模型,命令操作原子性,所以利用这个特性可以很容易的实现分布式锁.A用户端在Resdis写入1个KEY,其他的用户无法写入这个KEY,实现锁的效果.A用户使用完成后释 ...
- 在ionic2中集成swiper插件
1. 下载官方的js和css文件分别放在assets下的js和css文件夹,然后在index.html中引入 <!DOCTYPE html> <html lang="en& ...
- Python交互图表可视化Bokeh:7. 工具栏
ToolBar工具栏设置 ① 位置设置② 移动.放大缩小.存储.刷新③ 选择④ 提示框.十字线 1. 位置设置 import numpy as np import pandas as pd impor ...
- themeleaf跳转锚链接
<a class="lianjie3" th:href="@{/}+'#requires'"></a>
- HDU-2032解题报告
Hdu-2032解题报告题意:实现给定行数的杨辉三角的输出. 杨辉三角的特点:每一行数据的开头和结尾是1,然后其他的数据是由其上一个数据与其左上角的数据之和组成11 11 2 11 3 3 11 4 ...
- vue源码的构建
一.vue构建的基本了解 1,开始学习vue的源码的学习,vue.js是基于rollup构建的 它的配置在 scripts下面 rollup是webpack的简小版针对于js进行压缩的,没有提供复杂的 ...
- 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 ...