1010 Radix (25分)

改了一天也没明白,第7个数据是怎么卡的

#include <bits/stdc++.h>
using namespace std;
const int maxn=1005;
typedef long long ll;

ll tonum(char c)
{
	if (c>='0'&&c<='9') {
		return c-'0';
	}
	return c-'a'+10;
}

long long tran(string s,ll base)
{
	int len=s.length();
	ll res=0;
	for (int i=0;i<len;i++) {
		res=res*base+tonum(s[i]);
	}
	return res;
}

int main()
{
	int tag,base;
	string a,b;
	cin>>a>>b>>tag>>base;
	if (tag==2) {
		swap(a,b);
	}
	ll numa=tran(a,base);
	ll left=2,right=numa+1;
	int len=b.length();
	for (int i=0;i<len;i++) {
		left=max(left,tonum(b[i])+1);
	}
//	printf("%lld  %lld
",left,right);
	while (left<=right) {
		ll mid=(right+left)>>1;
//		printf("%lld
",mid);
		ll t=tran(b,mid);
		if (t<0||t>=numa) right=mid-1;
		else left=mid+1;
	}
	if (tran(b,left)==numa) {
		printf("%lld
",left);
	}
	else {
		printf("Impossible");
	}
	return 0;
}

原文地址:https://www.cnblogs.com/xyqxyq/p/12328854.html