惡夢是乙個登山愛好者,今天他來到了黃山。
俗話說的好,不走回頭路。所以在黃山,你只能往前走,或者往上走。並且很顯然的是,當你走到山脊的時候,你不能夠往上走,你只能往前走一步再往上走。
抽象一點而言就是,你可以把黃山視為乙個 n * n 格點圖,惡夢從(0,0)開始出發,要走到(n,n)。當他走到位置(x,y)的時候,它可以往(x + 1,y),或(x,y+1)走。並且當他走到(x,x)的時候,由於他已經處在了山脊上,所以他不能夠往(x,x+1)方向上走。
當惡夢興致勃勃準備開始爬山的時候,他的同伴告訴他,黃山由於年久失修,有一些位置出現了大坑,不能走。惡夢覺得更刺激了,但他想先知道他能有多少種方式走到黃山頂。
由於這個數字很大,所以你只需要將答案對 10^9 + 7 取模輸出即可。
第一行包括兩個整數 n,c,分別表示你可以把黃山視作乙個 n * n 的格點圖,並且黃山上面有 c 個
位置出現了大坑。
接下來的 c 行,每行包括兩個整數 x,y,表示 x,y 這個位置不能走。保證 x>=y,也就是說(x,y)必然在山上。
保證這 c 個點互不相同。
輸出只有乙個整數 ans,表示惡夢爬上山頂的路徑數對109
+7取模的值。
walk.in
7 4
6 5
5 3
2 1
7 1
walk.out
34對於 30%的資料,保證 n<=5000
對於另外 20%的資料,保證 c=0
對於另外 20%的資料,保證 c=1
對於 100%的資料,保證 n<=100000,c<=1000
保證對於(0,0),(n,n)不存在障礙點。
前排orz跪神犇
來自philips weng的題解
我才不會告訴你密碼gydg (!有智商!)
#include
#include
#include
#define fe first
#define se second
using
namespace
std;
typedef pair p;
const
int maxm = 1005,maxn = 200015,mo = int(1e9) + 7;
p block[maxm];
int fc[maxn],rv[maxn],f[maxn],n,c;
int quick(int a,int b)
int getc(int n,int m)
int normal(int s,int t,int x,int y)
int walk(int s,int t,int x,int y)
int main()
printf("%d\n", f[c]);
return
0;}
2013 省賽試題 有理數
二 完整 加法 public rational add rational x 返回頂部運算子 除法運算子,並且運算結果遵從向下取整。運算子 模運算,1 當運算子左邊小於右邊,結果就等於左邊 2 當運算子左邊大於右邊,結果就和算術中的取余是一樣的效果。返回頂部 public class test03 ...
藍橋杯省賽 方格填數C C
方格填數 如下的10個格仔 如果顯示有問題,也可以參看 圖1.jpg 填入0 9的數字。要求 連續的兩個數字不能相鄰。左右 上下 對角都算相鄰 一共有多少種可能的填數方案?請填寫表示方案數目的整數。注意 你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。dfs,不多說,下面是 includ...
JZOJ 省選模擬 數二數(two)
第一行正整數n和p output 輸出乙個數,表示答案對p取模。sample input 樣例輸入1 3 1000000007 樣例輸入2 7 999997543 sample output 樣例輸出1 48樣例輸出2 要區別所有的位置,必須滿足每個位置的詢問集合不同。定義f i 表示一共i個位置的...