#include<iostream>
#include <cstring>
using namespace std;
const int MAX = 21;
int n, m, x, y, k;
int arr[MAX][MAX];
int cmd[1001];
int dicenum[6];
int dicecopy[6];
void dicemove(int i) {
for (int i = 0; i < 6; i++) {
dicecopy[i] = dicenum[i];
}
switch (cmd[i]) {
case 1:
dicenum[1] = dicecopy[5];
dicenum[2] = dicecopy[1];
dicenum[3] = dicecopy[2];
dicenum[5] = dicecopy[3];
break;
case 2:
dicenum[1] = dicecopy[2];
dicenum[2] = dicecopy[3];
dicenum[3] = dicecopy[5];
dicenum[5] = dicecopy[1];
break;
case 3:
dicenum[0] = dicecopy[2];
dicenum[2] = dicecopy[4];
dicenum[4] = dicecopy[5];
dicenum[5] = dicecopy[0];
break;
case 4:
dicenum[0] = dicecopy[5];
dicenum[2] = dicecopy[0];
dicenum[4] = dicecopy[2];
dicenum[5] = dicecopy[4];
break;
}
}
bool mapmove(int i) {
int temp_x;
int temp_y;
switch (cmd[i]) {
case 1:
temp_x = x;
temp_y = y+1;
break;
case 2:
temp_x = x;
temp_y = y-1;
break;
case 3:
temp_x = x-1;
temp_y = y;
break;
case 4:
temp_x = x+1;
temp_y = y;
break;
}
if (temp_x >= 0 && temp_x <= n - 1 && temp_y >= 0 && temp_y <= m - 1) {
x = temp_x;
y = temp_y;
return true;
}
return false;
}
void changedice() {
if (arr[x][y] == 0)
arr[x][y] = dicenum[5];
else {
dicenum[5] = arr[x][y];
arr[x][y] = 0;
}
}
int main(void) {
cin >> n >> m >> x >> y >> k;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> arr[i][j];
}
}
for (int i = 0; i < k; i++)
cin >> cmd[i];
memset(dicenum, 0, sizeof(dicenum));
for (int i = 0; i < k; i++) {
if (mapmove(i)) {
dicemove(i);
changedice();
cout << dicenum[2] << endl;
}
else
continue;
}
return 0;
}
'백준 알고리즘 > 시뮬레이션' 카테고리의 다른 글
백준 3190 C++ (0) | 2019.04.07 |
---|---|
백준 3190번 C++ (0) | 2019.01.29 |
백준 14503번 C++ (0) | 2019.01.26 |
백준 1547 파이썬 (0) | 2018.11.13 |
백준 10219 파이썬 (0) | 2018.11.12 |