浙大PAT甲级-1010
来源:互联网 发布:淘宝卖霉菌龟头炎药品 编辑:程序博客网 时间:2024/05/18 00:22
Radix
这道题能完全ac真的很难
我是参考这篇(http://blog.csdn.net/matrix_reloaded/article/details/35880933)慢慢调出来的,他说的注意概括的比较好,我不做赘述,就强调一点(不是二分搜索):3.算法剪枝(3)对应的函数就是cmp()。
这道题也让我认识到点改进算法的意义了。
#include <iostream>#include <cstring>#include <cmath>using namespace std;long long int ni;long long int num(string s,long long int radix){ int i, ls=s.length(); long long int a=0,b=1; for(i=ls-1;i>=0;i--){ int x; if(s[i]>='0'&&s[i]<='9') x=s[i]-'0'; else if(s[i]>='a') x=s[i]-'a'+10; a+=x*b; b*=radix; } return a;}int cmp(string s,long long int radix){ int i, ls=s.length(); long long int a=0,b=1; for(i=ls-1;i>=0;i--){ int x; if(s[i]>='0'&&s[i]<='9') x=s[i]-'0'; else if(s[i]>='a') x=s[i]-'a'+10; a+=x*b; if(a>ni) return 1; b*=radix; } if(a==ni) return 0; return -1;}int maxNum(string s){ char a=s[0]; int ls=s.length(); for(int i=1;i<ls;i++){ if(a<s[i]) a=s[i]; } if(a>='0'&&a<='9') return a-'0'; else if(a>='a') return a-'a'+10;}int main(){ string a, b; int tag; long long int n1, n2, i,radix, radix2=0; cin>>a>>b>>tag>>radix; int maxnum; bool judge=false; if(a=="1"&&b=="1"){ cout<<2<<endl; return 0; } if(a==b){ cout<<radix<<endl; return 0; } if(tag==1){ n1=num(a,radix); ni=n1; maxnum=maxNum(b); long long int f, l, m; if(num(b,maxnum+1)<n1){ f=maxnum+1; l=(maxnum+1)<n1?(n1):(maxnum+1); while(f<=l){ m=(f+l)/2; int res=cmp(b,m); if(res==0){ radix2=m; judge=true; break; } else if(res==1){ l=m-1; }else{ f=m+1; } } }else if(num(b,maxnum+1)==n1){ judge=true; radix2=maxnum+1; } }else{ n2=num(b,radix); ni=n2; maxnum=maxNum(a); long long int f, l, m; if(num(a,maxnum+1)<n2){ f=maxnum+1; l=(maxnum+1)<n2?(n2):(maxnum+1); while(f<=l){ m=(f+l)/2; int res=cmp(a,m); if(res==0){ radix2=m; judge=true; break; } else if(res==1){ l=m-1; }else{ f=m+1; } } } else if(num(a,maxnum+1)==n2){ judge=true; radix2=maxnum+1; } } if(judge) cout<<radix2<<endl; else cout<<"Impossible"<<endl; return 0;}
阅读全文
0 0
- 浙大PAT甲级-1010
- **浙大PAT甲级 1010 进制转化
- 浙大pat甲级 1023
- 浙大pat甲级 1024
- 浙大pat甲级 1025
- 浙大PAT甲级 1026
- 浙大PAT甲级 1028
- 浙大PAT甲级 1029
- 浙大PAT甲级 1030
- 浙大PAT甲级 1031
- 浙大PAT甲级 1032
- 浙大PAT甲级 1033
- 浙大PAT甲级 1035
- 浙大PAT甲级 1037
- 浙大PAT甲级 1039
- 浙大PAT甲级 1040
- 浙大PAT甲级 1038
- 浙大PAT甲级 1041
- asp.net 操作带输入输出参数的分页存储过程(四)
- 交互式报表
- JPA基础
- 【简记】Operating System——process synchronization
- java语言基础组成
- 浙大PAT甲级-1010
- the king bank
- Kotlin-24.协程和线程(Coroutine & Thread)
- 前端面试之cookie
- Linux下安装Git
- hadoop-31
- 一元函数在区间上的形心(质心)公式的推导
- 【JavaScript】04变量、作用域及内存
- MMO小地图实现方式