51nod 1486 大大走格仔 容斥原理

2022-08-19 08:15:11 字數 2143 閱讀 6417

基準時間限制:1 秒 空間限制:131072 kb 分值: 160 難度:6級演算法題

有乙個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

/*

51nod 1486 大大走格仔(容斥原理)

problem:

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

solve:

很明顯用所有的方案數減去經過黑點的方案數就是答案. 而有的重複計算,所以容斥一下.

然後就沒什麼想法了, 主要是覺得方案數不怎麼好求(結果發現可以直接組合數解決...gg)

容斥計算出每個黑點到左上角的方案數, ans[i] - sum(ans[j] * f(j,i) while j < i) f來表示i,j之間的方案數

所以把h,w加入黑點全部求一遍.

hhh-2016/09/26-21:12:09

*/#pragma comment(linker,"/stack:124000000,124000000")

#include #include #include #include #include #include #include #include #define lson i<<1

#define rson i<<1|1

#define ll long long

#define clr(a,b) memset(a,b,sizeof(a))

#define key_val ch[ch[root][1]][0]

using namespace std;

const int maxn = 1e6 + 1000;

const int inf = 0x3f3f3f3f;

const ll mod = 1000000007;

const double eps = 1e-7;

templatevoid read(t&num)

int stk[70], tp;

templateinline void print(t p)

while(p) stk[++ tp] = p%10, p/=10;

while(tp) putchar(stk[tp--] + '0');

putchar('\n');

}ll pow_mod(ll a,ll n)

return cnt;

}int h,w,n;

ll ans[maxn];

ll fac[maxn];

ll inv[maxn];

struct node

x[maxn];

bool cmp(node u,node v)

int main()

x[n].a = h,x[n].b= w;

// for(int i = 0;i <= n;i++)

// cout << x[i].a << " "

fac[1] = 1,inv[1] = 1;

sort(x , x + n + 1,cmp);

for(int i = 2;i <= h + w;i++)

for(int i = 0;i <= n;i++)

}while(ans[i] < 0)

ans[i] += mod;

ans[i] %= mod;

}// for(int i = 0;i < n;i++)

// print(ans[i]);

print(ans[n]);

return 0;

}

51Nod 1486 大大走格仔 容斥

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

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...