https://www.acmicpc.net/problem/14891
#include <iostream>
#include <math.h>
using namespace std;
void input();
int gear[5][11];
int k;
int order[111][3];
void spin(int* arr, int way);
void solve(int num, int way);
void spread(int gear_n, int way, int rl);
int main(){
input();
for(int i = 0; i < k; i ++){
solve(order[i][0], order[i][1]);
}
int ans = 0;
for(int i = 1; i <= 4; i++) {
if (gear[i][0]) {
ans += (pow(2, i - 1));
}
}
printf("%d\n", ans);
}
void input(){
for(int j = 1; j <= 4; j++){
for(int i = 0; i < 8; i++){
scanf("%1d", &gear[j][i]);
}
}
scanf("%d", &k);
for(int i = 0; i < k; i++) scanf("%d %d", &order[i][0], &order[i][1]);
}
void spin(int* arr, int way){
int lis[11];
if (way == 1){
for(int i = 0; i < 7; i++){
lis[i + 1] = arr[i];
}
lis[0] = arr[7];
for(int i = 0; i < 8; i++) arr[i] = lis[i];
}
else{
for(int i = 1; i < 8; i++){
lis[i - 1] = arr[i];
}
lis[7] = arr[0];
for(int i = 0; i < 8; i++) arr[i] = lis[i];
}
}
void solve(int num, int way){
if (num == 1){
if (gear[1][2] != gear[2][6]) spread(num + 1, -way, 1);
spin(gear[1], way);
}
else if (num == 2){
if (gear[2][6] != gear[1][2]) spin(gear[1], -way);
if (gear[2][2] != gear[3][6]) spread(num + 1, -way, 1);
spin(gear[2], way);
}
else if (num == 3){
if (gear[3][6] != gear[2][2]) spread(num - 1, -way, -1);
if (gear[3][2] != gear[4][6]) spin(gear[4], -way);
spin(gear[3], way);
}
else{
if (gear[4][6] != gear[3][2]) spread(num - 1, -way, -1);
spin(gear[4], way);
}
}
void spread(int gear_n, int way, int rl){
if (gear_n < 1 or gear_n > 4) return;
if (rl == 1){
if (gear[gear_n][2] != gear[gear_n + 1][6]) spread(gear_n + 1, -way, rl);
spin(gear[gear_n], way);
}
else {
if (gear[gear_n][6] != gear[gear_n - 1][2]) spread(gear_n - 1, -way, rl);
spin(gear[gear_n], way);
}
}
|
cs |
'설명없음' 카테고리의 다른 글
백준 15673: 감시 [C언어], 삼성 코딩 테스트 (0) | 2022.06.13 |
---|---|
백준 16234: 인구 이동 [C언어], 삼성 코딩 테스트 (0) | 2022.06.13 |
백준 14499: 주사위 굴리기 [C언어], 삼성 코딩 테스트 (0) | 2022.06.13 |
백준 16236: 아기 상어 [C언어], 삼성 코딩 테스트 (0) | 2022.06.13 |
백준 14921: 용액 합성하기 [C/C++] (0) | 2022.06.08 |