南园十三首·其五
| 男兒何不帶吳鉤,收取燈塔五十州。 沙場秋點(diǎn)兵: 劉成將軍正在排兵布陣,他要將若干個(gè)士兵拍成一排,每個(gè)士兵都有一個(gè)戰(zhàn)斗值x,不同士兵的戰(zhàn)斗值可能相同。 假設(shè)初始時(shí),隊(duì)伍為空,但是隊(duì)伍的正方向朝東(若隊(duì)伍中有士兵,則他們面朝東,即東邊是隊(duì)伍隊(duì)首,西邊是隊(duì)伍隊(duì)尾) 劉成將軍會(huì)發(fā)布以下三條命令: 命令一名士兵從隊(duì)尾插入隊(duì)伍 命令一名士兵從隊(duì)首離開隊(duì)伍(若隊(duì)伍里面沒有士兵,則忽略此操作) 命令隊(duì)伍向后轉(zhuǎn)(隊(duì)伍的正方向改變,隊(duì)首變?yōu)殛?duì)尾,隊(duì)尾變?yōu)殛?duì)首。) 輸入格式:第一行一個(gè)正整數(shù)q(1<=q<=400000),表示命令的數(shù)量 接下來q行, 若是 1 x,則將一個(gè)戰(zhàn)斗值為x的士兵從隊(duì)尾插入隊(duì)伍(1<=x<=1000000)。 若是 2,則命令一名士兵從隊(duì)首離開隊(duì)伍(若當(dāng)前隊(duì)伍中沒有士兵,則忽略此操作) 若是 3,則命令隊(duì)伍向后轉(zhuǎn) 輸出格式:對于每個(gè)輸入輸出一行一個(gè)整數(shù),為當(dāng)前隊(duì)首和隊(duì)尾兩名士兵的戰(zhàn)斗值的異或值(這里的異或是按位異或,運(yùn)算符為 '^')。 若當(dāng)前隊(duì)伍為空,則輸出-1 |
輸入樣例1:
5 1 2 1 3 3 2 2輸出樣例1:
0 1 1 0 -1輸入樣例2:
4 1 2 3 1 3 3輸出樣例2:
0 0 1 1 考察 :? 隊(duì)列 |
注意 :? 無 |
思路 :? 設(shè)flag表示轉(zhuǎn)向(避免顛倒數(shù)組的操作) |
C/C++?
#include<bits/stdc++.h> using namespace std; typedef long long LL; list<LL> line; bool flag = true; int main() {LL q,a,b;scanf("%lld",&q);while (q--){scanf("%lld",&a);if(a==1){scanf("%lld",&b);if(flag) line.push_back(b);else line.push_front(b);}else if(a==2){if(!line.empty()) {if(flag) line.pop_front();else line.pop_back();}}else flag = !flag;if(line.empty()) cout << "-1" << endl;else{if(flag)cout << (line.front()^line.back()) << endl;else cout << (line.back()^line.front()) << endl;}}return 0; }總結(jié)
- 上一篇: 电商数据结构之订单模块(订单模块的数据结
- 下一篇: Redis你能跟面试官聊哪些?