1010. Radix (25)

来源:互联网 发布:短信验证码生成算法 编辑:程序博客网 时间:2024/06/06 05:49
#include <iostream>#include <cstdio>#include <vector>#include <cmath>#include <algorithm>#include <string>using namespace std;#define INF (~(1<<31))typedef long long ll;inline int char2num(char c){if(c >= '0' && c <= '9') return c - '0';else return c - 'a' + 10;}ll str2num(string s, ll radix){ll sum = 0;for(int i = 0; i < s.size(); ++i){sum *= radix;sum += char2num(s[i]);}return sum;}int cmp(string s, ll radix, ll target){ll sum = 0;for(int i = 0; i < s.size(); ++i){sum *= radix;sum += char2num(s[i]);if(sum > target) return 1;}if(sum < target) return -1;else return 0;}int main(){string s1, s2;ll tag, radix;cin >> s1 >> s2 >> tag >> radix;if(tag == 2){swap(s1, s2);}const ll target = str2num(s1, radix);ll maxNum = -INF;for(int i = 0; i < s2.size(); ++i){int num = char2num(s2[i]);if(num > maxNum){maxNum = num;}}ll low = maxNum+1, high = target+1, r = -1, mid = low;while(low <= high){int ret = cmp(s2, mid, target);if(ret < 0){low = mid + 1;}else if(ret > 0){high = mid - 1;}else{r = mid;break;}mid = low + (high-low)/2;}if(r == -1){printf("Impossible");}else{printf("%d", r);}return 0;}


0 0
原创粉丝点击