-
Notifications
You must be signed in to change notification settings - Fork 11
/
SPOJ21526.cc
51 lines (47 loc) · 1.21 KB
/
SPOJ21526.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// SPOJ 21526: Rotating Cube
// http://www.spoj.com/problems/PPBRQ/
//
// Solution: cube data structure
//
#include <iostream>
#include <vector>
#include <cstdio>
#include <algorithm>
#include <functional>
using namespace std;
#define fst first
#define snd second
#define all(c) ((c).begin()), ((c).end())
template <class T>
struct cube {
T F, U, D, L, R, B;
void rotX() { swap(D, B); swap(B, U); swap(U, F); } // FUBD -> DFUB
void rotY() { swap(D, R); swap(R, U); swap(U, L); } // LURD -> DLUR
void rotZ() { swap(B, R); swap(R, F); swap(F, L); } // LFRB -> BLFR
};
int main() {
int ncase; scanf("%d", &ncase);
for (int icase = 0; icase < ncase; ++icase) {
cube<int> c;
c.F = 0; c.U = 1; c.D = 2; c.L = 3; c.R = 4; c.B = 5;
char s[6][1024];
for (int i = 0; i < 6; ++i)
scanf("%s", s[i]);
int q; scanf("%d", &q);
for (int i = 0; i < q; ++i) {
char t[1024];
int k;
scanf("%s %d", t, &k);
k %= 4;
if (t[0] == 'X') {
while (k--) c.rotX();
} else if (t[0] == 'Y') {
while (k--) c.rotY();
} else {
while (k--) c.rotZ();
}
}
printf("%s %s %s %s %s %s\n",
s[c.F], s[c.U], s[c.D], s[c.L], s[c.R], s[c.B]);
}
}