連接:https://ac.nowcoder.com/acm/contest/224/B
來源:牛客網code
」我願意捨棄一切,以想念你,終此一輩子。「
」到後來,只能將記憶拼湊。「 ——QAQ
小可愛剛剛把KR的序列切開了,可是她尚未玩夠,因而就又雙叒叕打亂了佳佳剛剛買回來的序列。
可是還好,佳佳經過監控記錄下來了小可愛的打亂方式,因而把小可愛送回家以後,如今佳佳要還原這個序列。
佳佳須要維護一個長度爲n的序列,小可愛只用瞭如下兩種操做:
a.將最後一個數挪到第一位
b.將序列第3位挪到第一位
你須要給出最後的序列ip
某人跟我說是鏈表
而後就沒讀題無腦作
而後TLE以後發現不能無腦作get
而後有腦一下string
#include <stdlib.h> #include <stdio.h> #include <string.h> struct Node { int v; Node *nxt, *pre; Node(int _v, Node *_n = nullptr, Node *_p = nullptr) : v(_v), nxt(_n), pre(_p) { } } *head, *tail; void Delete(const Node* b, const Node* e = nullptr) { if (not e) e = b; b->pre->nxt = e->nxt; e->nxt->pre = b->pre; } void InsertNxt(Node* p, Node* b, Node* e = nullptr) { if (not e) e = b; Node* Pre = p; Node* Nxt = p->nxt; Pre->nxt = b; Nxt->pre = e; b->pre = Pre; e->nxt = Nxt; } void InsertPre(Node* p, Node* b, Node* e = nullptr) { if (not e) e = b; Node* Pre = p->pre; Node* Nxt = p; Pre->nxt = b; Nxt->pre = e; b->pre = Pre; e->nxt = Nxt; } void Sol1(int n) { Node* Beg = tail, *End = tail->pre; while (n--) { Beg = Beg->pre; } Delete(Beg, End); InsertNxt(head, Beg, End); } void sol2() { Node *now = head->nxt->nxt->nxt; Delete(now); InsertNxt(head, now); } void Show() { Node* now = head->nxt; while (now != tail) { printf("%d ", now->v); now = now->nxt; } puts(""); } int main () { int n, m; scanf("%d%d", &n, &m); int u; tail = new Node(0); head = new Node(0); tail->pre = head, head->nxt = tail; for (int i = 1; i <= n; i += 1) { scanf("%d", &u); InsertPre(tail, new Node(u)); } for (int i = 1; i <= m; i += 1) { char ch; int u; scanf("%d%c", &u, &ch); if (ch == 'a') { u %= n; if (u) Sol1(u); } else { u %= 3; while(u--) sol2(); } } Show(); return 0; }