※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 21275번 문제인 폰 호석만이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/probelm/21275
주어진 두 수를 2진수부터 36진수까지 각각의 진법으로 해석한 값을 먼저 계산해두자. 그리고 각각의 진법 쌍에 대하여 두 값이 같은지를 확인해 문제를 해결하자.
조건에 따라 두 진법이 서로 같으면 안 되며 각각의 값이
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
typedef long long ll;
typedef __int128 lll;
lll MX = 9223372036854775807LL;
lll A[37], B[37];
string s;
ll aval, aidx, bidx, cnt;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> s;
for (int b = 2; b < 37; b++) {
for (auto &l:s) {
int x;
if ('0' <= l && l <= '9') x = l - '0';
else x = 10 + l - 'a';
if (x >= b) {
A[b] = -1;
break;
}
A[b] = A[b] * b + x;
if (A[b] > MX) {
A[b] = -1;
break;
}
}
}
cin >> s;
for (int b = 2; b < 37; b++) {
for (auto &l:s) {
int x;
if ('0' <= l && l <= '9') x = l - '0';
else x = 10 + l - 'a';
if (x >= b) {
B[b] = -1;
break;
}
B[b] = B[b] * b + x;
if (B[b] > MX) {
B[b] = -1;
break;
}
}
}
for (int i = 2; i < 37; i++) {
for (int j = 2; j < 37; j++) {
if (i != j && A[i] == B[j] && A[i] >= 0) aval = A[i], aidx = i, bidx = j, cnt++;
}
}
if (cnt > 1) cout << "Multiple";
else if (cnt == 1) cout << aval << ' ' << aidx << ' ' << bidx;
else cout << "Impossible";
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 33689 // C++] CPDU (0) | 2025.04.01 |
---|---|
[BOJ 33690 // C++] 포린드롬 (0) | 2025.03.31 |
[BOJ 33574 // C++] 끊임없는 정렬과 창조함으로 (0) | 2025.03.27 |
[BOJ 29703 // C++] 펭귄의 하루 (0) | 2025.03.26 |
[BOJ 33656 // C++] Island Exploration (0) | 2025.03.25 |