過河 2023年NOIP全國聯賽提高組

2021-07-02 12:36:57 字數 1477 閱讀 8385

題目描述 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 引用大神證明:

只要求出1–10裡面任意兩個數的最小公倍數,然後取最大的,可以證明當兩石塊之間的距離大於它的時候,那麼大於它的部分的每乙個點都可以通過這兩個數的某一種組合跳到,所以當兩個石塊間的距離大於這個最小公倍數,那麼就把它們的距離縮小到這個最小公倍數.

#include 

#include

#include

#include

#include

#include

using

namespace

std;

int main()

,b[100010],f[100010];

memset(b,0,sizeof(b));

memset(f,0,sizeof(f));

cin>>l>>s>>t>>m;

int k=0;

for(int i=1;i<=m;i++)

cin>>a[i];

sort(a+1,a+m+1);

if(s==t)//如果最大步數等於最小步數,那麼顯然只能在它的倍數上走

cout

0; }

for(int i=1;i<=m;i++)

for(int i=1;i<=k+t;i++)

}f[i]=minn+b[i];

}int ans=9999999;

for(int i=k;i<=k+t;i++)

ans=min(ans,f[i]);

cout

0;}

1102 採藥 2023年NOIP全國聯賽普及組

2005年noip全國聯賽普及組 時間限制 1 s 空間限制 128000 kb 題目等級 gold description 辰辰是個天資聰穎的孩子,他的夢想是成為世界上最偉大的醫師。為此,他想拜附近最有威望的醫師為師。醫師為了判斷他的資質,給他出了乙個難題。醫師把他帶到乙個到處都是草藥的山洞裡對他...

借教室 2023年NOIP全國聯賽提高組

題目描述 description 在大學期間,經常需要租借教室。大到院系舉辦活動,小到學習小組自習討論,都需要 向學校申請借教室。教室的大小功能不同,借教室人的身份不同,借教室的手續也不一樣。面對海量租借教室的資訊,我們自然希望程式設計解決這個問題。我們需要處理接下來 n天的借教室資訊,其中第 i天...

國王遊戲(2023年NOIP全國聯賽提高組)

題目描述 description 恰逢 h 國國慶,國王邀請 n 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別...