奶牛贝茜正在学习如何在不同进制之间转换数字。
但是她总是犯错误,因为她无法轻易的用两个前蹄握住笔。
每当贝茜将数字转换为一个新的进制并写下结果时,她总是将其中的某一位数字写错。
例如,如果她将数字 1414 转换为二进制数,那么正确的结果应为 11101110,但她可能会写下 01100110 或 11111111。
贝茜不会额外添加或删除数字,但是可能会由于写错数字的原因,写下包含前导 00 的数字。
给定贝茜将数字 NN 转换为二进制数字以及三进制数字的结果,请确定 NN 的正确初始值(十进制表示)。

输入格式

第一行包含 NN 的二进制表示,其中一位是错误的。
第二行包含 NN 的三进制表示,其中一位是错误的。

输出格式

输出正确的 NN 的值。

数据范围

0≤N≤1090≤N≤109,且存在唯一解。

输入样例:

1010 212

输出样例:

14

样例解释

1414 在二进制下的正确表示为 11101110,在三进制下的正确表示为 112112。


  1. #include <iostream>
  2. #include <cstring>
  3. #include <algorithm>
  4. #include <unordered_set>
  5. using namespace std;
  6. //b进制转换为十进制
  7. int get(string a, int b) {
  8. int res = 0;
  9. for (auto c : a) {
  10. res = res * b + c - '0';
  11. }
  12. return res;
  13. }
  14. int main() {
  15. string a,b;
  16. cin >> a >> b;
  17. unordered_set<int> S;
  18. //枚举每一位不同的数字存放在哈希表
  19. for (auto &c : a) {
  20. c ^= 1;
  21. S.insert(get(a,2));
  22. c ^= 1;
  23. }
  24. for (auto &c : b) {
  25. char t = c;
  26. //枚举每一位不同的数字在哈希表中查找
  27. for (int i = 0; i < 3; ++i) {
  28. if (t != i + '0') {
  29. c = i + '0';
  30. int x = get(b,3);
  31. if (S.count(x)) {
  32. cout << x << endl;
  33. return 0;
  34. }
  35. }
  36. }
  37. //还原b
  38. c = t;
  39. }
  40. return 0;
  41. }