UESTC 1012 Ladygod 任意进制的转化

ProLightsfx 2016-12-11 112 12/11

Ladygod 任意进制的转化

Source

UESTC 1012 (CDOJ 1012)

My Solution

找出序列中最大的数字,加上一就是,满足条件的进制了。
用三种方法写了,暴力、一般、优化,当然不要不知道为什么题目要求的数据量那么小,第二个还是超时了(┬_┬)
1、暴力(超时了☺),并不奇怪
#include 
#include 
#include 
using namespace std;

int maxx(const string& ch1,const string& ch2)
{
    int m=0;
    for(int i=0;i<ch1.size();i++) m=(m>=ch1[i]-'0')?m:ch1[i]-'0';
    for(int i=0;i<ch2.size();i++) m=(m>=ch2[i]-'0')?m:ch2[i]-'0';
    return m;

}
void swapp(string& ch1,string& ch2,const string& str1,const string& str2)
{
    for(int i=str1.size()-1;i>=0;i--)
        ch1+=str1[i];
    for(int j=str2.size()-1;j>=0;j--)
        ch2+=str2[j];
}
int pow(const int &a,int b)
{
    int r=1,base=a;
    while(b!=0){
        if(b&1)
            r*=base;
        base*=base;
        b>>=1;
    }
    return r;
}
int main()
{
    int T,jin=0,midans1,midans2,midans,answ=0;
    string str1,str2,ch1,ch2;
    scanf("%d",&T);
    while(T--){
        ch1.clear();ch2.clear();midans1=1;midans2=0;midans=0,answ=0;
        cin>>str1>>str2;
        swapp(ch1,ch2,str1,str2);//cout<<ch1<<" "<<ch2;
        jin=maxx(ch1,ch2)+1;//cout<<jin<<" ";
        for(int i=0;i<ch1.size();i++){
            midans1+=(ch1[i]-'0')*pow(jin,i);
        }
        for(int j=0;j<ch2.size();j++){
            midans2+=(ch2[j]-'0')*pow(jin,j);
        }
        midans=midans1+midans2;
        while(midans){
            midans/=jin;answ++;
        }
        if(T) printf("%dn",answ);
        else printf("%d",answ);

    }
    return 0;
}

2、一般方法,也超时了,(┬_┬)

include 
#include 
#include 
#include 
#include 
using namespace std;
//!这个版本在时间上进行优化,  直接用string的性质直接在前面补0
int ans[16];
int maxx(const string& ch1,const string& ch2)
{
    int m=0;
    for(int i=0;i<ch1.size();i++) m=(m>=ch1[i]-'0')?m:ch1[i]-'0';
    for(int i=0;i<ch2.size();i++) m=(m>=ch2[i]-'0')?m:ch2[i]-'0';
    return m;

}

int main()
{
    int T,jin=0,answ=0;
    string ch1,ch2;
    scanf("%d",&T);
    while(T--){
        ch1.clear();ch2.clear();
        memset(ans,0,sizeof(ans));answ=0;
        cin>>ch1>>ch2;
        //swapp(ch1,ch2,str1,str2);//cout<<ch1<<" "<<ch2;
        jin=maxx(ch1,ch2)+1;//cout<<jin<<" "; while(ch1.size()!=4){ch1='0'+ch1;} while(ch2.size()!=4){ch2='0'+ch2;} for(int i=3;i>=0;i--){
            ans[4-i]+=(ch1[i]-'0')+(ch2[i]-'0');//cout<<ans[i+1]<<" "; if(ans[4-i]>=jin) {ans[4-i]=ans[4-i]-jin;ans[4-i+1]+=1;}
        }
        for(int j=5;j>0;j--){
            //cout<<ans[j];
            if(ans[j]!=0) {answ=j;break;}
        }

        if(T) printf("%dn",answ);
        else printf("%d",answ);

    }
    return 0;
}
应该主要是那里 for() 里面的  .size()  吧,忘了 int len = str.size();  了。(放里面,每次比较都要求一次的)
(虽然C++Primer5th上基本上都放里面,以至于记得比较牢固) 以后不要再忘记了哦

 

3、优化好几个地方,☺总算没有超时 这个倒是还算挺快的

#include 
#include 
#include 
using namespace std;

char ch1[8],ch2[8];
//!这个版本在时间上有相对进行了很多优化
int ans[16];
int maxx()
{
    int m=0;
    for(int i=0;i<4;i++)
    	m=(m>=ch1[i]-'0')?m:ch1[i]-'0';
    for(int i=0;i<4;i++)
    	m=(m>=ch2[i]-'0')?m:ch2[i]-'0';
    return m;

}
int main()
{
    int T,jin=0,answ=0,c1,c2;
    scanf("%d",&T);
    while(T--){
        memset(ch1,'0',sizeof(ch1));
        memset(ch2,'0',sizeof(ch2));
        memset(ans,0,sizeof(ans));answ=0;
        scanf("%d%d",&c1,&c2);//cout<<c1<<" "<<c2; for(int i=3;c1>0||c2>0;i--){
            if(c1>0){ch1[i]=c1%10+'0';c1/=10;}  //笑脸的原因是忘了转化了,笑脸的ASCII码是 01
            if(c2>0){ch2[i]=c2%10+'0';c2/=10;}
        }
        //swapp(ch1,ch2,str1,str2);//cout<<ch1<<" "<<ch2;
        jin=maxx()+1;//cout<<jin<<" "; /* while(ch1.size()!=4){ch1='0'+ch1;cot++;} while(ch2.size()!=4){ch2='0'+ch2;cot++;} */ //printf("%s %s ",ch1,ch2); for(int i=3;i>=0;i--){
            ans[4-i]+=(ch1[i]-'0')+(ch2[i]-'0');//cout<<ans[i+1]<<" "; if(ans[4-i]>=jin) {ans[4-i]=ans[4-i]-jin;ans[4-i+1]+=1;}
        }
        for(int j=5;j>0;j--){
            //cout<<ans[j];
            if(ans[j]!=0) {answ=j;break;}
        }
        if(T) printf("%dn",answ);
        else printf("%d",answ);
    }
    return 0;
}


非特殊说明,本博所有文章均为博主原创,未经许可不得转载。

https://www.prolightsfxjh.com/

Thank you!

                                                                                                                                             ------from ProLightsfx

- THE END -

ProLightsfx

11月15日20:15

最后修改:2024年11月15日
0

非特殊说明,本博所有文章均为博主原创,未经许可不得转载。

共有 0 条评论