So in this question all you had to do was carefully handle power function and to take care of base conversion
i.e. if string is AB
then the base must be atleast 12
After this all thats left is to store conversion of each number in set and update frequency if, atlast frequency is n then thats the answer else output -1
#include<bits/stdc++.h>
using namespace std;
#define mod 1000000000000
long long power(long long num,long long expo){
long long val=1;
while(expo){
val*=num;
if(val>mod || val <0){
return -1;
break;
}
expo--;
}
return val;
}
long long converttobase(long long base,string number){
for(long long j=number.size()-1;j>=0;j--){
if(int(number[j])>=48 && int(number[j])<=57)
{
if(int(number[j])-48>=base)
return -1;
}
if(int(number[j])>=65 && int(number[j])<=90)
{
if(int(number[j])-65+10>=base)
return -1;
}
}
long long val=0,poww=0,count=0;
for(long long j=number.size()-1;j>=0;j--){
int temp=int(number[j]);
if(temp>=48 && temp<=57){
poww=((temp-48))*power(base,count++);
if(poww<0){
// flaggreater=1;
return -1;
}
}
else{
poww=(temp-65+10)*power(base,count++);
if(poww<0){
// flaggreater=1;
return -1;
}
}
val=val+ poww;
if(val>mod)
return -1;
}
return val;
}
int main(){
long long t;
cin>>t;
while(t--){
long long n;
cin>>n;
long long num=n,ans=-1;
map<long long,long long>freq;
while(n--){
long long index=0;
long long base;
string number;
cin>>base>>number;
if(base ==-1){
set<long long>values;
for(long long i=2;i<=36;i++){
long long convertedBaseValue=converttobase(i,number);
if(convertedBaseValue>=0){
values.insert(convertedBaseValue);
}
}
for(auto it=values.begin();it!=values.end();it++){
freq[*it]++;
}
}
else{
long long convertedBaseValue=converttobase(base,number);
freq[convertedBaseValue]++;
}
}
for(auto i : freq){
if(i.second==num && i.first>=0){
ans=i.first;
break;
}
}
cout<<ans<<endl;
}
}