csdn程式設計挑戰 書本轉移

2021-06-26 02:00:33 字數 1486 閱讀 8602

題目詳情 小強

有 3 個箱子 a,b,c 用來裝書,所有的書(一共n本)都按序號由小到大的順

序堆在 a上,現在他想把所有的書全都放到 c 裡面去。每次他從 a 書架

拿 a 本書(不夠就全拿完)到 b,a 箱子翻轉,然後從 b 拿 b 本書(不夠就全

拿完)到 c,b 箱子翻轉。然後重複操作,直到所有書都到了 c,求最後的

c 裡面書的順序,詳細見樣例。

輸入描述:

輸入由多組資料構成,每組資料佔一行,3 個數,n(1<=n<=10^5),a(1<=a<=10^9) , b(1<=b<=10^9),含義見題目表述。以檔案結尾。

輸出描述:

每組資料輸出一行,首先輸出資料組數,然後輸出 n 個數,c 中書的排列。

答題說明

輸入樣例:

4 2 1

輸出樣例

case 1: 1 4 2 3

hint

初始狀態a:4321              b: 空      c:空

第一次:     a->b   a:21         b:34     c: 空

a 翻轉 a:12         b:34     c: 空

b->c   a:12             b: 4     c: 3

b 翻轉 a:12         b:4        c: 3

第二次:  a->b  a:空              b:214     c:3

a 翻轉 a:空          b:214     c:3

b->c   a:空          b:14     c:23

b 翻轉 a:空          b:41     c:23

第三次:  b->c   a:空         b:1         c:423

b 翻轉  a:空         b:1         c:423

第四次:     b->c     a:空         b:空     c:1423

思路:這道題用雙向鍊錶來做就再適合不過了,因為a和b都有翻轉操作,而雙向鍊錶可以從兩個方向遍歷鍊錶元素,所以當翻轉之後就相當於從另乙個方向取鍊錶元素。最終,用兩個雙向鍊錶代表a和b,用乙個棧代表c,一直模擬題目操作,當a和b都為空的時候,輸出棧c的值即可。

**:

#include#include#includeusing namespace std;

int main()

while((!b_list.empty()) && b_tmp--)

}else//偶數次操作的時候從尾部取元素

while((!b_list.empty()) && b_tmp--)

}count++;

} cout << "case " << n_case << ":";

while(!s.empty())

cout << endl;

} return 0;

}

HDU4552 怪盜基德的挑戰書

problem description 在樹最美麗的那天,當時間老人再次把大鐘平均分開時,我會降臨在燈火之城的金字塔前,帶走那最珍貴的笑容。這是怪盜基德盜取巴黎羅浮宮的 蒙娜麗莎的微笑 這幅畫時,挑戰書上的內容。但這次,怪盜基德的挑戰書上出現了一串串小寫字母 aaab sdfeeddd.柯南以小學生...

怪盜基德的挑戰書 HDU 4552

在樹最美麗的那天,當時間老人再次把大鐘平均分開時,我會降臨在燈火之城的金字塔前,帶走那最珍貴的笑容。這是怪盜基德盜取巴黎羅浮宮的 蒙娜麗莎的微笑 這幅畫時,挑戰書上的內容。但這次,怪盜基德的挑戰書上出現了一串串小寫字母 aaab sdfeeddd.柯南以小學生的眼睛,超凡高中生的頭腦,快速統計各種字...

nitacm20317 來自張司機的挑戰書

題目 讓你求從x到y中 1 x y 10 18 二進位制一的個數最多的數是哪個,如果有多個相同的答案,輸出最小的。類似題目及題解 分析 先把x和y轉換成二進位制位 假設x,y最高位不是同一位 則答案可以取11111 如果lr最高位相同 則最高位的數一定取,然後比較減去最高位後,剩下的數 特判 y的二...