Saturday, 5 May 2012

UVa 343 What Base Is This? Solution

#include<iostream>
#include<list>
#include<string>
#include<cstring>
#include<sstream>
#include<cctype>
#include<string.h>
#include<algorithm>
#include<cmath>
#include<stack>
#include<fstream>
#include<cstdlib>
#include<vector>
#include<map>
#include<utility>
#include<iomanip>
#include<queue>
using namespace std;
#define clr(a) memset(a,0,sizeof(a))
#define fill(a,v) memset(a,v,sizeof(a))
#define PB push_back
#define pi acos(-1.0)
#define eps 1e-9


int main()
{
    string s1,s2;
    bool check,conti;
    long base1,base2,power,i,sum1,sum2;
    while(cin>>s1>>s2)
    {
        check=false;

        for(base1=2;base1<=36;base1++)
            {
                for(base2=2;base2<=36;base2++)

                {
                    sum1=0;
                    power=0;
                    conti=false;

                    for(i=s1.length()-1;i>=0;i--)
                    {
                        if(s1[i]>47 && s1[i]<58)
                        {
                            sum1+=(s1[i]-48)*pow(base1,power++);
                            if(s1[i]-48>=base1)
                            conti=true;
                        }

                        else
                        {
                            sum1+=(s1[i]-55)*pow(base1,power++);
                            if(s1[i]-55>=base1)
                            conti=true;
                        }
                    }


                    sum2=0;
                    power=0;

                    for(i=s2.length()-1;i>=0;i--)
                    {
                        if(s2[i]>47 && s2[i]<58)
                        {
                            sum2+=(s2[i]-48)*pow(base2,power++);
                            if(s2[i]-48>=base2)
                            conti=true;
                        }

                        else
                        {
                            sum2+=(s2[i]-55)*pow(base2,power++);
                            if(s2[i]-55>=base2)
                            conti=true;
                        }
                    }
                    if(conti)
                    continue;

                    if(sum1==sum2)
                    {
                        check=true;
                        cout<<s1<<" (base "<<base1<<") = "<<s2<<" (base "<<base2<<")"<<endl;
                        break;
                    }
                }
                if(check)
                break;
            }
        if(!check)
        cout<<s1<<" is not equal to "<<s2<<" in any base 2..36"<<endl;
    }
return 0;
}

UVa 336 A Node Too Far Solution

#include<iostream>
#include<vector>
#include<map>
#include<queue>
using namespace std;
int main()
{
    long long nc,i,pair1,pair2,node,ttl,number,l,x,diff,cs=1;
    vector<long long>v[100000];
    map<long long,int>mp;
    map<long long,int>visit;
    map<long long,int>dif;
    queue<long long>q;
    while(cin>>nc)
    {
        if(nc==0)   return 0;
        diff=0;
        dif.clear();
        for(i=0;i<99900;i++)
        v[i].clear();
        mp.clear();
        for(i=0;i<nc;i++)
        {
            cin>>pair1>>pair2;
            v[pair1].push_back(pair2);
            v[pair2].push_back(pair1);
            if(dif[pair1]!=1)
            {
                dif[pair1]=1;
                diff++;
            }
            if(dif[pair2]!=1)
            {
                dif[pair2]=1;
                diff++;
            }
        }
        //cout<<diff<<endl;
        while(cin>>node>>ttl)
        {
            if(node==0 && ttl==0)
            break;
            number=0;
            visit.clear();
            visit[node]=1;
            mp[node]=0;
            q.push(node);
            while(!q.empty())
            {
                x=q.front();
                q.pop();
                l=v[x].size();
                for(i=0;i<l;i++)
                {
                    if(visit[v[x][i]]!=1)
                    {
                        mp[v[x][i]]=mp[x]+1;
                        if(mp[v[x][i]]>ttl)
                        break;
                        number++;
                        visit[v[x][i]]=1;
                        q.push(v[x][i]);
                    }
                }
            }

        cout<<"Case "<<cs<<": "<<diff-number-1<<" "<<"nodes not reachable from node "<<node<<" with TTL = "<<ttl<<"."<<endl;
        cs++;
        }
    }
}

UVa 299 Train Swapping Solution

#include<stdio.h>
int main()
{
int i,j,k,a,n,t,item[100],count;
while(scanf("%d",&a)==1)
{
for(k=1;k<=a;k++)
    {
    count=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&item[i]);

    for(i=1;i<n;i++)
        for(j=n-1;j>=i;j--)
            if(item[j-1]>item[j])
                {
                count=count+1;
                t=item[j-1];
                item[j-1]=item[j];
                item[j]=t;
                }
    printf("Optimal train swapping takes %d swaps.\n",count);
    }
}
return 0;
}

UVa 272 TeX Quotes Solution

#include<stdio.h>
#include<string.h>
int main()
{
long int i,count=0,l;
char s[100000];
while(gets(s))
{
l=strlen(s);
for(i=0;i<l;i++)
    {
    if(s[i]=='"')
        {
        count=count+1;
        if(count%2==1)
            printf("``");
        else
            printf("''");
        }
    else
        printf("%c",s[i]);
    }
printf("\n");
}
return 0;
}

UVa 263 Number Chains Solution

#include<iostream>
#include<string>
#include<cstring>
#include<sstream>
#include<cctype>
#include<string.h>
#include<algorithm>
#include<cmath>
#include<stack>
#include<fstream>
#include<cstdlib>
#include<vector>
#include<map>
#include<utility>
#include<iomanip>
#include<queue>
using namespace std;
#define clr(a) memset(a,0,sizeof(a))
#define PB push_back

int main()
{
    long long n,a[1000],i,j,x,nc,big,small;
    string s,s1,s2;
    map<string,long long>M;
    while(cin>>n)
    {
        if(n==0)    return 0;
        nc=1;
        M.clear();
        stringstream ss;
        ss<<n;
        s=ss.str();
        cout<<"Original number was "<<n<<endl;
        while(1)
        {
            clr(a);
            for(i=0;i<s.length();i++)
            a[i]=s[i]-'0';
        sort(a,a+s.length());
        s1=s2="";
        for(i=0,j=s.length()-1;i<s.length();i++,j--)
            {
            s1+=a[i]+'0';
            s2+=a[j]+'0';
            }
        stringstream ss1(s1);
        ss1>>small;
        stringstream ss2(s2);
        ss2>>big;
        x=big-small;
        stringstream ss3;
        ss3<<x;
        s=ss3.str();
        cout<<big<<" - "<<small<<" = "<<x<<endl;
        if(M[s]==1) break;
        else M[s]=1;
        nc++;
        }
    cout<<"Chain length "<<nc<<endl<<endl;
    }
return 0;
}