【NOIP2012初賽】新殼棧

題目:

Description

小Z設計了一種新的數據結構“新殼棧”。首先,它和傳統的棧一樣支持壓入、彈出操作。此外,其棧頂的前c個元素是它的殼,支持翻轉操作。其中,c>2是一個固定的正整數,表示殼的厚度。小Z還希望,每次操作,無論是壓入、彈出還是翻轉,都僅用與c無關的常數時間完成。聰明的你能幫助她編程實現“新殼棧”嗎?

程序期望的實現效果如以下兩表所示。其中,輸入的第一行是正整數c,之後每行輸入都是一條指令。另外,如遇彈出操作時棧爲空,或翻轉操作時棧中元素不足c個,應當輸出相應的錯誤信息。

指令                涵義

1[空格]e   在棧頂壓入元素e

2              彈出(並輸出)棧頂元素

3              翻轉棧頂的前c個元素

0              退出

 

Input

第一行輸入c,之後每行輸入都是一條指令,輸入以0結束。

Output

對於每個彈出操作,輸出棧頂元素,如果棧爲空輸出“Error: the stack is empty!”。對於每個翻轉操作,如果棧中元素不足c個,輸出”Error: less than c elements in the stack!“,注意這裏的c在輸出時以具體輸入的c的值代替。

Sample Input

3

1 1

1 2

1 3

1 4

3

1 5

3

2

2

2

3

2

2

2

0

Sample Output

3

2

5

Error: less than 3 elements in the stack!

4

1

Error: the stack is empty!

Data Constraint

c<=50000

操作數<=1000000

題解:

按照題目說的去做就好了。

嗯,就是暴力模擬。

翻轉的時候c++有個快捷點的方法:

reverse(a+a[0]-c+1,a+a[0]+1);

頭文件是algorithm

還有,基本上所有開頭不是c的頭文件都要開命名空間(using namespace std)才能用。

還有,翻轉時不夠c位的報錯要注意。
那個字符串中的c不是字符c,是對應的數字啊。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章