51nod 1486 大大走格仔

2022-08-20 06:03:12 字數 1959 閱讀 3251

1486 大大走格仔

基準時間限制:1 秒 空間限制:131072 kb

有乙個h行w列的棋盤,裡面有一些格仔是不能走的,現在要求從左上角走到右下角的方案數。

input

單組測試資料。

第一行有三個整數h, w, n(1 ≤ h, w ≤ 10^5, 1 ≤ n ≤ 2000),表示棋盤的行和列,還有不能走的格仔的數目。

接下來n行描述格仔,第i行有兩個整數ri, ci (1 ≤ ri ≤ h, 1 ≤ ci ≤ w),表示格仔所在的行和列。

輸入保證起點和終點不會有不能走的格仔。

output

輸出答案對1000000007取餘的結果。
input示例

3 4 2

2 22 3

output示例

2

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8

using

namespace

std;

9 typedef long

long

ll;10 typedef long

double

ld;11 typedef pairpr;

12const

double pi=acos(-1

);13

#define rep(i,a,n) for(int i=a;i<=n;i++)

14#define per(i,n,a) for(int i=n;i>=a;i--)

15#define rep(i,u) for(int i=head[u];i;i=next[i])

16#define clr(a) memset(a,0,sizeof(a))

17#define pb push_back

18#define mp make_pair

19#define fi first

20#define sc second

21#define pq priority_queue

22#define pqb priority_queue , less>

23#define pqs priority_queue , greater>

24#define vec vector

25 ld eps=1e-9

;26 ll pp=1000000007

;27 ll mo(ll a,ll pp)

28 ll powmod(ll a,ll b,ll pp)

29void fre()

30//

void add(int x,int y,int z)

31int dx[5]=,dy[5]=;

32 ll read()

37const

int n=200005

;38 ll fac[n],inv[n],dp[2005

];39

struct

nodef[2005

];42

bool

cmp(node a,node b)

45 inline ll c(int m,int

n)49

intmain()

57 sort(f+1,f+n+1

,cmp);

58 ll ans=c(h-1,h-1+w-1

);59

for (int i=1;i<=n;i++)65}

66 ans=mo(ans-mo(dp[i]*c(h-f[i].r,h-f[i].r+w-f[i].c),pp),pp);67}

68 printf("

%lld

",ans);

69return0;

70 }

view code

51nod 1486 大大走格仔

1486 大大走格仔 codeforces 基準時間限制 1 秒 空間限制 131072 kb 分值 160 難度 6級演算法題 有乙個h行w列的棋盤,裡面有一些格仔是不能走的,現在要求從左上角走到右下角的方案數。input 單組測試資料。第一行有三個整數h,w,n 1 h,w 10 5,1 n 2...

51nod 1486 大大走格仔

sol 考慮沒有障礙的情況,從 1,1 到 n,m 答案可直接算出為 可得到遞推式 code include include include include include include include include include include using namespace std typ...

51Nod 1486 大大走格仔 容斥

題目 對於每個點,求出從起點到它,不經過其他障礙點的方案數 求乙個點時,首先得到走到它的所有方案,減去 x y 都小於它的點的方案 走到該點的方案數 由於該點的方案也不包括其它障礙點,所以就是容斥。如下 include include include include using namespace ...