奶牛贝茜正在学习如何在不同进制之间转换数字。
但是她总是犯错误,因为她无法轻易的用两个前蹄握住笔。
每当贝茜将数字转换为一个新的进制并写下结果时,她总是将其中的某一位数字写错。
例如,如果她将数字 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;}}}//还原bc = t;}return 0;}
