连接: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; }