天天看點

codevs1105 過河

1105 過河

2005年NOIP全國聯賽提高組

 時間限制: 1 s

 空間限制: 128000 KB

 題目等級 : 鑽石 Diamond

題解

題目描述 Description

在河上有一座獨木橋,一隻青蛙想沿着獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很讨厭踩在這些石子上。由于橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點:0,1,……,L(其中L是橋的長度)。坐标為0的點表示橋的起點,坐标為L的點表示橋的終點。青蛙從橋的起點開始,不停的向終點方向跳躍。一次跳躍的距離是S到T之間的任意正整數(包括S,T)。當青蛙跳到或跳過坐标為L的點時,就算青蛙已經跳出了獨木橋。

題目給出獨木橋的長度L,青蛙跳躍的距離範圍S,T,橋上石子的位置。你的任務是确定青蛙要想過河,最少需要踩到的石子數。

輸入描述 Input Description

輸入第一行有一個正整數L(1<=L<=109),表示獨木橋的長度。第二行有三個正整數S,T,M,分别表示青蛙一次跳躍的最小距離,最大距離,及橋上石子的個數,其中1<=S<=T<=10,1<=M<=100。第三行有M個不同的正整數分别表示這M個石子在數軸上的位置(資料保證橋的起點和終點處沒有石子)。所有相鄰的整數之間用一個空格隔開。

輸出描述 Output Description

輸出隻包括一個整數,表示青蛙過河最少需要踩到的石子數。

樣例輸入 Sample Input

10

2 3 5

2 3 5 6 7

樣例輸出 Sample Output

2

資料範圍及提示 Data Size & Hint

資料規模

對于30%的資料,L<=10000;

對于全部的資料,L<=109。

這道題去年暑假考過,今天剛弄明白。

不難看出,10^9不是随便開個數組就能解決的,但石子個數最多隻有100個,這就為離散化提供了條件。

橋很長,石子很少,是以可能某兩個石子之間距離特别大,如果這個距離大過了所有可能走的步數的最小公倍數,那麼就可以直接截掉這一塊(無論怎麼走結果都相同),于是問題得到解決。

由于s和t都是1~10的數,是以索性把1~10的數的乘積2520作為模,來截獨木橋