#include <stdio.h>
#include <string.h>
// 킹이 이동가능한 8가지 방향을 x, y 변화량으로 나타낸다
int dx[8] = {1, -1, 0, 0, 1, -1, 1, -1};
int dy[8] = {0, 0, -1, 1, 1, 1, -1, -1};
// 문제에서 나온 이동 명령어에 대응하는 문자열 배열
char *v[8] = {"R", "L", "B", "T", "RT", "LT", "RB", "LB"};
// 이동 명령어를 변환해주는 함수
int change(char *move) {
for (int i = 0; i < 8; i++) {
if (strcmp(move, v[i]) == 0)
return i; // 해당 명령어와 일치하면 반환
}
return -1;
}
int main() {
char king[3], stone[3];
int n;
//
scanf("%s %s %d", king, stone, &n);
// 입력된 문자열의 위치를 체스판 좌표(0~7)로 변환한다
int kx = king[0] - 'A'; // 열: A~H -> 0~7
int ky = king[1] - '1'; // 행: 1~8 -> 0~7
int sx = stone[0] - 'A';
int sy = stone[1] - '1';
for (int i = 0; i < n; i++) {
char move[3];
scanf("%s", move); // 이동 명령 입력한다
int v_change = change(move); // 이동 명령어를 change함수로 변환한다
if (v_change == -1) continue;
// 킹이 이동할 좌표 계산
int nkx = kx + dx[v_change]; //nkw은 새로운 kw그런거다 nky도 그렇다
int nky = ky + dy[v_change];
// 체스판 범위 안에 킹이 있는지 확인을 가장 먼저 한다
if (nkx >= 0 && nkx < 8 && nky >= 0 && nky < 8) {
// 이동할 위치에 돌이 있으면
if (nkx == sx && nky == sy) {
// 돌도 같은 방향으로 한 칸 이동
int nsx = sx + dx[v_change];
int nsy = sy + dy[v_change];
// 돌이 체스판 범위 안에 있어야 이동 가능
if (nsx >= 0 && nsx < 8 && nsy >= 0 && nsy < 8) {
kx = nkx;
ky = nky;
sx = nsx;
sy = nsy;
}
// 돌이 체스판 밖이면 킹과 돌 모두 이동하지 않음
} else {
// 돌과 부딪히지 않으면 킹만 이동
kx = nkx;
ky = nky;
}
}
}
printf("%c%d\n", kx + 'A', ky + 1);
printf("%c%d\n", sx + 'A', sy + 1);
return 0;
}
#include <stdio.h>
long long X, Y;
int main() {
scanf("%lld %lld", &X, &Y);
// 현재 승률을 계산한다
long long Z = (Y * 100) / X;
// 이분 탐색 범위 설정
long long left = 1, right = 1e9, a = -1;
// 이분 탐색을 시작
while (left <= right) {
long long mid = (left + right) / 2;
// mid는 현재 검사할 추가 경기 수
// mid 만큼 더 이겨서 새 승률 계산
long long Z_2 = ((Y + mid) * 100) / (X + mid);
if (Z_2> Z) {
// 승률이 현재보다 클 시 조건을 만족한다.
a = mid;
right = mid - 1;
} else {
// 승률이 오르지 않았기에 더 큰 수가 필요하다.
left = mid + 1;
}
}
printf("%lld\n", a);
return 0;
}