PAT甲级 1010 Radix

news/2024/11/7 9:30:57/

PAT甲级 1010 Radix

Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The answer is yes, if 6 is a decimal number and 110 is a binary number.

Now for any pair of positive integers N1 and N​2​​ , your task is to find the radix of one number while that of the other is given.

Input Specification:

Each input file contains one test case. Each case occupies a line which contains 4 positive integers:

N 1 N 2 t a g r a d i x N_1 N_2 tag  radix N1 N2 tag radix

Here N1 and N2 each has no more than 10 digits. A digit is less than its radix and is chosen from the set { 0-9, a-z } where 0-9 represent the decimal numbers 0-9, and a-z represent the decimal numbers 10-35. The last number radix is the radix of N1 if tag is 1, or of N2 if tag is 2.

Output Specification:

For each test case, print in one line the radix of the other number so that the equation N1 = N2 is true. If the equation is impossible, print Impossible. If the solution is not unique, output the smallest possible radix.

Sample Input 1:

6 110 1 10

Sample Output 1:

2

Sample Input 2:

1 ab 1 2

Sample Output 2:

Impossible

这道题的陷阱就是很多人以为进制固定在2-36进制,其实不然,要用二分查找符合条件的进制,下限即为字符串最大的字符+1(注意下限最小为2),上限就是确定进制的字符串的十进制,注意本题卡int,故须判断一下上界是否溢出。我写得尽可能简洁易懂,供大家参考,AC代码如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll ans1=0,ans2=0;
int n,k;
string s1,s2;
ll p(ll k,int t){//手写pow函数,防止其越界ll s=1;for(int i=0;i<t;i++){s*=k;}return s;
}ll sum(string s,ll k){//k进制转十进制int len=s.length();ll ans=0;for(int i=0;i<len;i++){if(isdigit(s[i])) ans+=p(k,len-i-1)*(s[i]-'0');else ans+=p(k,len-i-1)*(s[i]-'a'+10);}return ans;
}ll maxnum(string s){//找二分查找的下限int len=s.length();int ans=0;for(int i=0;i<len;i++){if(isdigit(s[i])) ans=max(ans,(s[i]-'0'));else ans=max(ans,s[i]-'a'+10);}return ll(ans+1);
}ll bs(string s,ll a){//二分查找ll l=maxnum(s),r=max(a,l);if(l<2) l=2;//稳定下界,但是后来试了一下,不加也是对的,看来数据还没那么坑while(l<=r){ll mid=(l+r)/2;ll ans=sum(s,mid);if(ans==a) return mid;else if(ans>a || ans<0) r=mid-1;//ans<0很重要,检查上界是否溢出else l=mid+1;}return -1;
}void judge(){ans1=sum(s1,k);ll p=bs(s2,ans1);if(p!=-1){cout<<p;return;}else{cout<<"Impossible";return;}
}int main(){cin>>s1>>s2>>n>>k;if(n==2) swap(s1,s2);judge();return 0;
}

http://www.ppmy.cn/news/623307.html

相关文章

关于P-TMSI和TLLI

P-TMSI是属于GMM层的一个参数&#xff0c;通常包含在GMM层的一些消息里面&#xff0c;如Attach request、Attach accept、Routing area update request、Routing area update accept等等。而TLLI是属于LLC层&#xff08;逻辑链路控制层&#xff09;的一个临时逻辑链路标识符&am…

pat 甲级 1010 Radix (25 point(s))

1010 Radix (25 point(s)) Given a pair of positive integers, for example, 6 and 110, can this equation 6 110 be true? The answer is yes, if 6 is a decimal number and 110 is a binary number. Now for any pair of positive integers N1​ and N2​, your task …

Pareto Principle

最近在看ICDE2021的调优文章时发现出现了大量的Pareto Set的理论&#xff0c;这里记录一下。 一、Pareto理论 由意大利经济学家维弗雷多帕雷托 (Villefredo Pareto)&#xff08;图1&#xff09;在1987年提出&#xff1a;社会财富的80%是掌握在20%的人手中&#xff0c;而余下的…

PAT 1010 Radix (25 分)

1010 Radix (25 分) 今天给大家分享的是PAT甲级的一道小题&#xff0c;求进制。 原题请点击我 简单翻译&#xff1a; 给你两个数字&#xff0c;告诉你一个数的进制是多少&#xff0c;问&#xff0c;另一个数是否在某个进制下和第一个数相等。如果存在&#xff0c;就输出这个进…

PLL详解

https://www.cnblogs.com/MAQI/p/7831156.html PLL 时钟是时序逻辑的灵魂。 在实际应用中,时钟信号在频率或者相位上通常并不满足直接使用的需求,而内部时序逻辑又只能对时钟信号进行整数倍的分频,并且不能保证产生新时钟信号的相位稳定性,所以需要用到时钟管理单元对时钟…

RL_PPO

不同于value-based方法的 q π ( s , a ) q_{\pi}(s,a) qπ​(s,a)&#xff0c;policy-base方法可以解决连续的动作&#xff0c;因为 π ( a ∣ s ) \pi(a|s) π(a∣s)是一个连续的函数。 策略梯度 Proximal Policy Optimization(PPO) 关于[[重要性采样]] PPO的两种算法都可以…

XOR Pair

样例解释 1 对于第11个样例&#xff0c;合法的数对如下&#xff1a;(0, 1)(0,1)和(1,0)(1,0)。 对于第22个样例&#xff0c;合法的数对如下&#xff1a;(0, 10)(0,10)&#xff0c;(2, 8)(2,8)&#xff0c;(3, 9)(3,9)&#xff0c;(8, 2)(8,2)&#xff0c;(9, 3)(9,3)和(10, 0…

PAT 1010 Radix (25)

先看题目&#xff1a; 这个题目算是比较DT&#xff0c;花了很长时间&#xff0c;提交次数很多&#xff0c;每次都会有测试点没通过&#xff0c;后来网上搜索了一下&#xff0c;有一些特俗边界条件被我们忽略。 1&#xff0c;首先求目标数据进制&#xff0c;这个进制在任何条件…