南园十三首·其五
| 男兒何不帶吳鉤,收取燈塔五十州。 沙場秋點兵: 劉成將軍正在排兵布陣,他要將若干個士兵拍成一排,每個士兵都有一個戰斗值x,不同士兵的戰斗值可能相同。 假設初始時,隊伍為空,但是隊伍的正方向朝東(若隊伍中有士兵,則他們面朝東,即東邊是隊伍隊首,西邊是隊伍隊尾) 劉成將軍會發布以下三條命令: 命令一名士兵從隊尾插入隊伍 命令一名士兵從隊首離開隊伍(若隊伍里面沒有士兵,則忽略此操作) 命令隊伍向后轉(隊伍的正方向改變,隊首變為隊尾,隊尾變為隊首。) 輸入格式:第一行一個正整數q(1<=q<=400000),表示命令的數量 接下來q行, 若是 1 x,則將一個戰斗值為x的士兵從隊尾插入隊伍(1<=x<=1000000)。 若是 2,則命令一名士兵從隊首離開隊伍(若當前隊伍中沒有士兵,則忽略此操作) 若是 3,則命令隊伍向后轉 輸出格式:對于每個輸入輸出一行一個整數,為當前隊首和隊尾兩名士兵的戰斗值的異或值(這里的異或是按位異或,運算符為 '^')。 若當前隊伍為空,則輸出-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 考察 :? 隊列 |
注意 :? 無 |
思路 :? 設flag表示轉向(避免顛倒數組的操作) |
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; }總結
- 上一篇: 电商数据结构之订单模块(订单模块的数据结
- 下一篇: Redis你能跟面试官聊哪些?