oj 雙向佇列

2021-10-23 06:53:55 字數 1973 閱讀 8037

description

想想雙向鍊錶……雙向佇列的定義差不多,也就是說乙個佇列的隊尾同時也是隊首;兩頭都可以做出隊,入隊的操作。

現在給你一系列的操作,請輸出最後佇列的狀態;

命令格式:

lin x x表示乙個整數,命令代表左邊進隊操作;

rin x 表示右邊進隊操作;

rout

lout 表示出隊操作;

input

第一行包含乙個整數m(m<=10000),表示有m個操作;

以下m行每行包含一條命令;

命令可能不合法,對於不合法的命令,請在輸出中處理;

output

輸出的第一行包含佇列進行了m次操作後的狀態,從左往右輸出,每兩個之間用空格隔開;

以下若干行處理不合法的命令(如果存在);

對於不合法的命令,請輸出一行x error

其中x表示是第幾條命令;

sample

input

8lin 5

rin 6

lin 3

lout

rout

rout

rout

lin 3

output

37 error

hint

第一種方法:用陣列模擬雙向佇列

#include

using

namespace std;

int q[

20010

], w[

10010];

intmain()

else

q[--l]

= a;

}elseif(

strcmp

(str,

"rin")==

0)else

q[++r]

= a;

}elseif(

strcmp

(str,

"lout")==

0)else

if(l <= r)

l++;else

if(l > r)

w[++k]

= i;

}elseif(

strcmp

(str,

"rout")==

0)else

if(r >= l)

r--;else

if(r < l)

w[++k]

= i;}}

for(

int i = l; i <= r; i++

) cout << endl;

if(k!=0)

for(

int i =

1; i <= k; i++

) cout << w[i]

<<

' '<<

"error"

<< endl;

return0;

}

第二種方法:stl

#include

#include

using

namespace std;

intmain()

; cin>>m;

for(i=

1;i<=m;i++

)elseif(

strcmp

(str,

"rin")==

0)elseif(

strcmp

(str,

"lout")==

0)elseif(

strcmp

(str,

"rout")==

0)}while

(!q.

empty()

) cout

1;i<=m;i++

)return0;

}

雙向佇列oj

time limit 1000ms memory limit 65536kb problem description 想想雙向鍊錶 雙向佇列的定義差不多,也就是說乙個佇列的隊尾同時也是隊首 兩頭都可以做出隊,入隊的操作。現在給你一系列的操作,請輸出最後佇列的狀態 命令格式 lin x x表示乙個整數...

oj1466 雙向佇列

description 想想雙向鍊錶 雙向佇列的定義差不多,也就是說乙個佇列的隊尾同時也是隊首 兩頭都可以做出隊,入隊的操作。現在給你一系列的操作,請輸出最後佇列的狀態 命令格式 lin x x表示乙個整數,命令代表左邊進隊操作 rin x 表示右邊進隊操作 rout lout 表示出隊操作 inp...

deque雙向佇列

deque雙向佇列是一種雙向開口的連續線性空間,可以高效的在頭尾兩端插入和刪除元素,deque在介面上和vector非常相似,下面列出deque的常用成員函式 deque的實現比較複雜,內部會維護乙個map 注意!不是stl中的map容器 即一小塊連續的空間,該空間中每個元素都是指標,指向另一段 較...