-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path14499_주사위굴리기.cpp
118 lines (115 loc) · 1.58 KB
/
14499_주사위굴리기.cpp
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int n, m;
struct dice {
int u = 0;
int d = 0;
int l = 0;
int r = 0;
int f = 0;
int b = 0;
void right() {
int temp = d;
d = r;
r = u;
u = l;
l = temp;
}
void left() {
int temp = u;
u = r;
r = d;
d = l;
l = temp;
}
void down() {
int temp = d;
d = f;
f = u;
u = b;
b = temp;
}
void up() {
int temp = d;
d = b;
b = u;
u = f;
f = temp;
}
};
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int x, y, k;
cin >> n >> m >> x >> y >> k;
vector<vector<int>> map(n, vector<int>(m, 0));
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin >> map[i][j];
dice d;
int dy, dx;
while (k--) {
int r;
cin >> r;
switch (r){
case 1:
dy = y + 1;
if (dy >= m)
break;
y = dy;
d.right();
cout << d.u << '\n';
if (map[x][y] != 0) {
d.d = map[x][y];
map[x][y] = 0;
}
else
map[x][y] = d.d;
break;
case 2:
dy = y - 1;
if (dy < 0)
break;
y = dy;
d.left();
cout << d.u << '\n';
if (map[x][y] != 0) {
d.d = map[x][y];
map[x][y] = 0;
}
else
map[x][y] = d.d;
break;
case 3:
dx = x - 1;
if (dx < 0)
break;
x = dx;
d.up();
cout << d.u << '\n';
if (map[x][y] != 0) {
d.d = map[x][y];
map[x][y] = 0;
}
else
map[x][y] = d.d;
break;
case 4:
dx = x + 1;
if (dx >= n)
break;
x = dx;
d.down();
cout << d.u << '\n';
if (map[x][y] != 0) {
d.d = map[x][y];
map[x][y] = 0;
}
else
map[x][y] = d.d;
break;
}
}
}