#2580 笨拙的手指
例如,如果她将数字 14 转换为二进制数,那么正确的结果应为 1110,但她可能会写下 0110 或 1111。贝茜不会额外添加或删除数字,但是可能会由于写错数字的原因,写下包含前导 0的数字。给定贝茜将数字 N 转换为二进制数字以及三进制数字的结果,请确定 N 的正确初始值(十进制表示)。
输入格式
第一行包含 N 的二进制表示,其中一位是错误的。
第二行包含 N 的三进制表示,其中一位是错误的。
输出格式
输出正确的 N 的值。
数据范围
0≤ N ≤109,且存在唯一解。
#include<bits/stdc++.h>
using namespace std;
int get(string x,int b){//秦九韶公式:任意进制数转十进制
int rec = 0;
for(auto c : x){
rec = rec * b + c - '0';
}
return rec;
}
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;
}
}
char t = c;
用 t 记录原 c 。s.count(x)
在set s 里查找 x ,找到返回1。auto&
引用传递,每次都更改 a , b 的值。