題目詳情 小強
有 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的二...