0
点赞
收藏
分享

微信扫一扫

AcWing 寒假每日一题2022

人间四月天i 2022-01-06 阅读 68
c++

#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 的值。

举报

相关推荐

0 条评论