原题链接
给个二进制和三进制数,他们都是由十进制数变换过来的,但是两个里面都有一位是不对的,要找到原来的十进制数
枚举十进制数会超时,反过来想,枚举二进制数和三进制数修改一位后对应的十进制数,找到重合的部分就好了, 因为题里说了有唯一解
#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_set>
using namespace std;
int get(string s, int b)
{
int res = 0;
for(auto a : s)
res = res * b + (a - '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(i + '0' != t)
{
c = i + '0';
int x = get(b, 3);
if(S.count(x))
{
cout << x << endl;
return 0;
}
}
c = t;
}
return 0;
}