演算法與資料結構實驗題 2 3 泡泡的飯碗

2021-08-10 10:57:06 字數 1465 閱讀 2448

演算法與資料結構實驗題 2.3 泡泡的飯碗

★實驗任務

飽了嗎終於發現泡泡破解了它的**並藉此白吃白喝。飽了嗎當即改變了自己的幸運兒生成原始碼,但是,又被機智的泡泡偷瞄到了,機智的泡泡馬上意識到可能要飯碗不保了:

每當有人參與**,這個人就進入佇列。當人數達到 n 的時候開獎一次。

1. 開獎時,將執行 m 次操作,每次操作挑乙個不超過 200 的數 d,且保證 d不超過人數的一半,然後把第 d 個人和第 n-d+1 個人這兩個人之間的隊伍反**

2. 反轉前:1,2,…,d-1,d,d+1,…, n-d+1, n-d+2,…n(從左往右編號)

3. 反轉後:1,2,…,d-1,n-d+1,n-d,…, d+1, d, n-d+2…n(這裡的編號是旋轉前從左到右的編號)

m 次操作完後從隊頭開始報號,沒報到 x 的回到隊尾,報到 x 的就是幸運兒啦;

機智的泡泡馬上又意識到,當 n 和 m 次操作和 x 的值已知的時候,幸運兒仍然是可以預知到是第幾個參與**的人的。

機智的泡泡馬上又意識到,自己的飯碗保住了。

但是!機智的泡泡馬上意識到乙個問題,這個預知結果的**不好打。

但是!機智的泡泡馬上想起了你。

機智的泡泡馬上把鍋又扔給了你。

★資料輸入

輸入第一行為三個正整數 n,m,x。

接下來 m 行,第 i 行給出第 i 次操作的 d,如題;

對於 80%的資料,2<=n<=2000,1<=m<=2000;

對於 100%的資料,2<=n<=100000,1<=m<=100000

1<=x<=1000,000,000,1<=d<=min(n/2,200);

★資料輸出

輸出幸運兒是第幾個參加**的人。

輸入示例

5 2 1

2 1

輸出示例

5輸入示例

5 4 3

2 1

2 1

輸出示例

3思路:

因為資料量比較大,所以如果用演算法跑完整個過程,一定會超時。

根據題意,這個佇列是對稱反轉,那麼我們只需要知道所求數字有沒有反轉就行。因為有n個人在玩遊戲,所以結果肯定是1到n,那麼我們可以通過取模,直接確定是哪乙個位置上的人是最終答案,再確定這個位置翻轉了幾次就ok。

這裡的取模比較特殊,正常x%n會得到0~n-1的數字,所以我們要用(x-1)%n+1就可以得到1~n的數字

附上大佬**:

#include

int main()

//printf("%d\n",cnt);

if(cnt&1)

printf("%d\n",ans);

return

0;

}

時間複雜度為o(1)。

演算法與資料結構實驗題1 9

實驗任務 上回說到,你奔走於各個世界線拯救靜靜。現在,完成任務的你決定玩個簡單的遊戲靜一靜。我們知道,數字在計算機裡是用二進位制儲存的,現在你想知道如果把乙個數字的二進位制倒過來是多少。比如 int a 5,用二進位制表示就是00000000000000000000000000000101。把它倒過...

演算法與資料結構實驗題 3 1 火車

實驗任務 tonyy 等火車無聊的時候,會去觀察火車的排列,有一天他思考這麼乙個問 題,火車總站的火車只能進站,要出站的話只能先出最後進站的那輛車,那麼知 道火車的進站順序,能不能把它的出站順序調整成火車站想要的呢?資料輸入 輸入第一行為乙個正整數 n 表示火車輛數 編號 1 n 1 n 9 然後為...

資料結構與演算法實驗祝恩 《資料結構與演算法》實驗報告

保持青春的秘訣,是有一顆不安分的心。資料結構與演算法 實驗報告 模板 實驗題目 線性表綜合實驗 班級 姓名 學號 完成日期 一 實驗目的 熟悉線性表的基本操作在兩種儲存結構上的實現,其中以熟悉各種鍊錶的操作為重點。通過具體應用例項在複習高階程式語言使用方法的基礎上初步了解資料結構的應用。二 實驗內容...