pta甲级1010

Posted canchan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pta甲级1010相关的知识,希望对你有一定的参考价值。

题目中只说明了给出的字符是在0~35的,并没有说明数的进制也是在0~35的。

想当然的认为两个数的进制都是在这个范围,并没有想到还需要二分范围。另外在运算过程中容易爆long long,需要注意判断。

技术图片
#include <bits/stdc++.h>
#define ll long long

using namespace std;
int mina, minb;
string a, b;
map<char, int> mp;
ll func(ll x)
{
    ll res=0;
    for(int i=0; b[i]; i++){
        res*=x;
        res+=mp[b[i]];
    }
    if(res<0) res=1e18;
    return res;
}
int main()
{
    for(int i=0; i<=9; i++)
        mp[(char)i]=i-0;
    for(int i=a; i<=z; i++)
        mp[(char)i]=i-a+10;
    int tag, radix;
    cin>>a>>b>>tag>>radix;
    //scanf("%s %s %d %d", a, b, &tag, &radix);
    if(tag==2) swap(a, b);
    ll na=0;
    for(int i=0; a[i]; i++){
        mina=max(mina, mp[a[i]]);
        na*=radix;
        na+=mp[a[i]];
    }
    for(int i=0; b[i]; i++)
        minb=max(minb, mp[b[i]]);
    ll l=minb+1, r=na, mid;
    while(l<r){
        mid=(l+r)>>1;
        if(func(mid)>=na)
            r=mid;
        else
            l=mid+1;
    }
    if(func(l)==na)
        printf("%lld
", l);
    else
        puts("Impossible");
    return 0;
}
View Code

 

以上是关于pta甲级1010的主要内容,如果未能解决你的问题,请参考以下文章

PTA甲级问题 写出这个数 第二个测试点无法通过

PAT甲级 1010 Radix

PAT 甲级 1010 Radix

PAT甲级1010踩坑记录(二分查找)——10测试点未过待更新

PAT甲级 1010 Radix

PAT 甲级 A1010 (2019/02/20)