奶牛贝茜正在学习如何在不同进制之间转换数字。
但是她总是犯错误,因为她无法轻易的用两个前蹄握住笔。
每当贝茜将数字转换为一个新的进制并写下结果时,她总是将其中的某一位数字写错。
例如,如果她将数字 1414 转换为二进制数,那么正确的结果应为 11101110,但她可能会写下 01100110 或 11111111。
贝茜不会额外添加或删除数字,但是可能会由于写错数字的原因,写下包含前导 00 的数字。
给定贝茜将数字 NN 转换为二进制数字以及三进制数字的结果,请确定 NN 的正确初始值(十进制表示)。
输入格式
第一行包含 NN 的二进制表示,其中一位是错误的。
第二行包含 NN 的三进制表示,其中一位是错误的。
输出格式
数据范围
输入样例:
输出样例:
样例解释
1414 在二进制下的正确表示为 11101110,在三进制下的正确表示为 112112。
#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_set>
using namespace std;
//b进制转换为十进制
int get(string a, int b) {
int res = 0;
for (auto c : a) {
res = res * b + c - '0';
}
return res;
}
int main() {
string a,b;
cin >> a >> b;
unordered_set<int> S;
//枚举每一位不同的数字存放在哈希表
for (auto &c : a) {
c ^= 1;
S.insert(get(a,2));
c ^= 1;
}
for (auto &c : b) {
char t = c;
//枚举每一位不同的数字在哈希表中查找
for (int i = 0; i < 3; ++i) {
if (t != i + '0') {
c = i + '0';
int x = get(b,3);
if (S.count(x)) {
cout << x << endl;
return 0;
}
}
}
//还原b
c = t;
}
return 0;
}