• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
村雨sup
自己选的路,跪着也要走完 XD
博客园    首页    新随笔    联系   管理    订阅  订阅
PAT 1010 Radix(X)
1010 Radix (25 分)
 

Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The answer is yes, if 6 is a decimal number and 110 is a binary number.

Now for any pair of positive integers N​1​​ and N​2​​, your task is to find the radix of one number while that of the other is given.

Input Specification:

Each input file contains one test case. Each case occupies a line which contains 4 positive integers:


N1 N2 tag radix

Here N1 and N2 each has no more than 10 digits. A digit is less than its radix and is chosen from the set { 0-9, a-z } where 0-9 represent the decimal numbers 0-9, and a-z represent the decimal numbers 10-35. The last number radix is the radix of N1 if tag is 1, or of N2 if tag is 2.

Output Specification:

For each test case, print in one line the radix of the other number so that the equation N1 = N2 is true. If the equation is impossible, print Impossible. If the solution is not unique, output the smallest possible radix.

Sample Input 1:

6 110 1 10

Sample Output 1:

2

Sample Input 2:

1 ab 1 2

Sample Output 2:

Impossible
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define MAXN 500

vector<char> vec;

map<char,int> mp;

ll tansss(string s,int x){
    ll sum = 0;
    ll t = 1;
    for(int i=s.size()-1;i>=0;i--){
        sum += mp[s[i]]*t;
        t *= x;
    }
    return sum;
}





int main(){
    for(int i=0;i <= 9;i++){
        vec.push_back(char('0'+i));
    }
    for(int i=10;i <= 35;i++){
        char temp = char('a'+(i-10));
        vec.push_back(temp);
    }

    for(int i=0;i < vec.size();i++){
        mp[vec[i]] = i;
    }


//    while(1){
//        string s; cin >> s;
//        int radix; cin >> radix;
//        cout << tansss(s,radix);
//    }



    string s1,s2;
    int tag,radix;
    cin >> s1 >> s2 >> tag >> radix;

    if(tag == 1){
        ll ok = tansss(s1,radix);
        for(int i=2;i<=35;i++){
            if(tansss(s2,i)==ok){
                cout << i;
                return 0;
            }
        }
        cout << "Impossible";
    }
    else{
        ll ok = tansss(s2,radix);
        for(int i=2;i<=35;i++){
            if(tansss(s1,i)==ok){
                cout << i;
                return 0;
            }
        }
        cout << "Impossible";
    }




















    return 0;
}

还要判断溢出。。。打扰了拿16分溜了

 
posted on 2019-05-05 14:12  村雨sup  阅读(106)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3