Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define dbg(i,j) cout<<"I am "<<i<<" = "<<endl<<j<<endl;
- #define dbr(name,a) cout<<name<<endl;for(auto x:a)cout<<x<<" ";cout<<endl;
- #define DBR(name,a) cout<<name<<endl;for(auto x:a){ for(auto y:x)cout<<y<<" ";cout<<endl;}
- #define dbmp(name,a) cout<<name<<endl;for(auto x:a){ cout<<x.first<<"\t"<<x.second<<endl;}
- #define dbp(name,a) cout<<name<<endl;cout<<a.first<<"\t"<<a.second<<endl;
- #define boost ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
- using namespace std;
- typedef long long int big;
- typedef long double fig;
- big val(char c)
- {
- if (c >= '0' && c <= '9')
- return (big)c - '0';
- else
- return (big)c - 'A' + 10;
- }
- big toDeci(string str, big base)
- {
- big len = str.size();
- big power = 1; // Initialize power of base
- big num = 0; // Initialize result
- big i;
- // dbg("base",base);
- // Decimal equivalent is str[len-1]*1 +
- // str[len-1]*base + str[len-1]*(base^2) + ...
- for (i = len - 1; i >= 0; i--)
- {
- // A digit in input number must be
- // less than number's base
- if (val(str[i]) >= base)
- {
- printf("Invalid Number");
- return -1;
- }
- num += val(str[i]) * power;
- power = power * base;
- }
- return num;
- }
- int main(){
- big t;
- cin>>t;
- while(t--){
- big n;
- cin>>n;
- vector<vector<big>> bag;
- for(big i=0;i<n;i++){
- big a;
- string s;
- cin>>a;
- cin>>s;
- vector<big> temp;
- if(a==-1){
- vector<big> arr;
- for(auto x:s){
- if(x>=48 && x<=57){
- arr.push_back(x-48);
- }
- else{
- arr.push_back(10+(x-'A'));
- }
- }
- big base=*max_element(arr.begin(),arr.end())+1;
- if(base==1){
- base=2;
- }
- for(big z=base;z<=36;z++){
- temp.push_back(toDeci(s,z));
- }
- }
- else{
- temp.push_back(toDeci(s,a));
- }
- bag.push_back(temp);
- }
- // DBR("BAG",bag);
- big ans=-1;
- big start[n]={0};
- for(big j=0;j<bag[0].size();j++){
- big check=bag[0][j];
- // dbg("check",check);
- big flag=0;
- for(big z=1;z<n;z++){
- for(big c=start[z];c<bag[z].size();c++){
- // dbg("checking with",bag[z][c]);
- if((check==bag[z][c])){
- flag++;
- start[z]=c;
- break;
- }
- else if(check<bag[z][c]){
- start[z]=c;
- break;
- }
- }
- }
- if(flag==n-1){
- ans=bag[0][j];
- break;
- }
- }
- cout<<ans<<endl;
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment