• PAT (Advanced Level) 1010. Radix (25)


    撸完这题,感觉被掏空。

    由于进制可能大的飞起。。所以需要开longlong存,答案可以二分得到。

    进制很大,导致转换成10进制的时候可能爆long long,在二分的时候,如果溢出了,那么上界=mid-1

    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<cstdio>
    using namespace std;
    
    char s[15],t[15];
    int tag;
    long long radix;
    long long num1,num2;
    
    long long f(char *x,long long k)
    {
        int len=strlen(x);
        long long ans=0;
        for(int i=0;x[i];i++)
        {
            ans=ans*k;
            if(x[i]>='0'&&x[i]<='9') ans=ans+x[i]-'0';
            else ans=ans+x[i]-'a'+10;
            if(ans<0) return -1;
        }
        return ans;
    }
    
    int main()
    {
        scanf("%s%s%d%lld",s,t,&tag,&radix);
        if(tag==2) swap(s,t);
        int lens=strlen(s),lent=strlen(t);
    
        num1=f(s,radix);
    
        long long l=2,r=num1+1;
    
        for(int i=0;t[i];i++)
        {
            if(t[i]>='0'&&t[i]<='9') l=max(l,(long long)(t[i]-'0'+1));
            else l=max(l,(long long)(t[i]-'a'+10+1));
        }
    
        long long ans;
        bool flag=0;
    
        while(l<=r)
        {
            long long mid=(l+r)/2;
            long long num2=f(t,mid);
    
            if(num2<0) r=mid-1;
            else if(num1>num2) l=mid+1;
            else if(num1<num2) r=mid-1;
            else
            {
                ans=mid;
                flag=1;
                break;
            }
        }
    
        if(flag==1 ) printf("%lld
    ",ans);
        else printf("Impossible
    ");
        return 0;
    }
  • 相关阅读:
    人件阅读笔记之三
    明日计划:团队开发Fooks第十天
    明日计划:团队开发Fooks第九天
    明日计划:团队开发Fooks第八天
    明日计划:团队开发Fooks第七天
    明日计划:团队开发Fooks第六天
    优先队列
    KMP
    django-中间件
    Ajax--参数,csrf跨站请求伪造,serialize(),上传文件formdata
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5496885.html
Copyright © 2020-2023  润新知