Saturday, 2 April 2016

UVa 544 - Heavy Cargo

#include<bits/stdc++.h>
#define mx 100009
using namespace std;
typedef long long ll;
struct edge
{
    string u,v;
    ll w;
    bool operator < (const edge& p) const
    {
        return w>p.w;
    }
};
map<string,string>pr;
vector<edge>e;
string fr,en;
ll m,n;
string fnd(string r)
{
    return (pr[r]=="")?r:fnd(pr[r]);
}
ll mst()
{
    sort(e.begin(),e.end());
    ll min_val=10000000;
    for(ll i=0;i<m;i++)
    {
        string u=fnd(e[i].u);
        string v=fnd(e[i].v);
        if(u!=v)
        {
            pr[u]=v;
            if(min_val>e[i].w)
            {
                //cout<<e[i].w<<endl;
                min_val=e[i].w;
            }
        }
        if(fnd(fr)==fnd(en))
        {
            break;
        }

    }
    return min_val;
}
int main()
{
    ll k=1;
    while(cin>>n>>m)
    {
        if(n==0&&m==0)
            break;
        e.clear();
        pr.clear();
        for(int i=1;i<=m;i++)
        {
            string u,v;
            ll w;
            cin>>u>>v>>w;
            edge get;
            get.u=u;
            get.v=v;
            get.w=w;
            e.push_back(get);
        }
        cin>>fr>>en;
        cout<<"Scenario #"<<k++<<endl<<mst()<<" tons"<<endl<<endl;
    }
    return 0;
}

Friday, 1 April 2016

UVa 424 - Integer Inquiry

#include<bits/stdc++.h>
using namespace std;
int main()
{
    char s[110];
    long long int num[100][100],sum[1000],i=0,l,j,n=0,index,temp,rem,m=999,start;
    for(i=0;i<100;i++)
    {

        for(j=0;j<100;j++)
        {
            num[i][j]=0;
        }
    }
    for(i=0;i<1000;i++)
        sum[i]=0;
    while(1)
    {
        scanf("%s",s);
        if(s[0]=='0')
            break;
        else
        {
            l=strlen(s);


            for(j=99;j>=0;j--)
            {
                if(l>0)
                {
                    num[n][j]=s[l-1]-48;
                }
                l--;
            }
            n++;

        }
    }
    temp=0;
    rem=0;
    for(i=99;i>=0;i--)
    {

        for(j=99;j>=0;j--)
        {
            temp=temp+num[j][i];

        }
        temp=temp+rem;
        sum[m]=temp%10;
        temp=temp/10;
        m=m-1;
    }
    for(i=0;i<1000;i++)
    {
        if(sum[i]!=0)
        {
            start=i;
            break;
        }
    }
    for(i=start;i<1000;i++)
        cout<<sum[i];
    cout<<endl;
    return 0;
}

UVa 417 - Word Index

#include<bits/stdc++.h>
using namespace std;
int main()
{
    vector<string>name;
    string x[20000];
    string s;
    char a[10],t[20];
    int i,j,k,l,m,n=0,b,c,d,e,f,g;
    for(i=1;i<=26;i++)
    {
        m=i+96;
        a[0]=m;
        a[1]='\0';
        string s(a);
        x[n++]=s;
        //name.push_back(s);

    }
    for(i=1;i<26;i++)
    {
        for(j=i+1;j<=26;j++)
        {
            a[0]=i+96;
            b=a[0];
            a[1]=j+96;
            c=a[1];
            if(c>b)
            {
                a[0]=i+96;
                a[1]=j+96;
                a[2]='\0';
                string s(a);
                x[n++]=s;
                //name.push_back(s);

            }
        }
    }
    for(i=1;i<25;i++)
    {
        for(j=i+1;j<26;j++)
        {
            for(k=j+1;k<=26;k++)
            {
                a[0]=i+96;
                b=a[0];
                a[1]=j+96;
                c=a[1];
                a[2]=k+96;
                d=a[2];
                if(d>c&&c>b)
                {
                    a[0]=i+96;
                    a[1]=j+96;
                    a[2]=k+96;
                    a[3]='\0';
                    string s(a);
                    x[n++]=s;

                    //name.push_back(s);

                }
            }
        }
    }
    for(i=1;i<=23;i++)
    {
        for(j=i+1;j<=24;j++)
        {
            for(k=j+1;j<=25;j++)
            {
                for(l=k+1;l<=26;l++)
                {
                    a[0]=i+96;
                    b=a[0];
                    a[1]=j+96;
                    c=a[1];
                    a[2]=k+96;
                    d=a[2];
                    a[3]=l+96;
                    e=a[3];
                    if(e>d&&d>c&&c>b)
                    {
                        a[0]=i+96;
                        a[1]=j+96;
                        a[2]=k+96;
                        a[3]=l+96;
                        a[4]='\0';
                        string s(a);
                        x[n++]=s;
                        //cout<<x[n-1]<<"\t"<<n-1<<endl;
                        //name.push_back(s);

                    }
                }
            }
        }
    }
    for(i=1;i<=22;i++)
    {
        for(j=i+1;j<=23;j++)
        {
            for(k=j+1;k<=24;k++)
            {
                for(l=k+1;k<=25;k++)
                {
                    for(m=l+1;l<=26;l++)
                    {
                        a[0]=i+96;
                        b=a[0];
                        a[1]=j+96;
                        c=a[1];
                        a[2]=k+96;
                        d=a[2];
                        a[3]=l+96;
                        e=a[3];
                        a[4]=m+96;
                        f=a[4];
                        if(f>e&&e>d&&d>c&&c>b)
                        {
                            a[0]=i+96;
                            a[1]=j+96;
                            a[2]=k+96;
                            a[3]=l+96;
                            a[4]=m+96;
                            a[5]='\0';
                            string s(a);
                            x[n++]=s;
                            //name.push_back(s);

                        }
                    }
                }
            }
        }
    }
    while(scanf("%s",t))
    {
        bool flag=0;
        for(i=0;i<n;i++)
        {
            if(t==x[i])
            {
                cout<<i+1<<endl;
                flag=1;
                break;
            }
        }
        if(flag==0)
            cout<<0<<endl;
    }
    return 0;


}

UVa 190 - Circle Through Three Points

#include<bits/stdc++.h>
using namespace std;
int main()
{
    double a,b,c,d,e,f,x,y,r,cont;
    double m,n;
    while(cin>>a>>b)
    {
        cin>>c>>d;
        cin>>e>>f;
        x=((b-d)*(e*e+f*f)+(d-f)*(a*a+b*b)-(b-f)*(c*c+d*d))/(2.0*(((a-c)*(b-f))-(b-d)*(a-e)));
        y=((a-e)*(c*c+d*d)+(e-c)*(a*a+b*b)-(a-c)*(e*e+f*f))/(2.0*(((a-c)*(b-f))-(b-d)*(a-e)));
        r=sqrt(((a-x)*(a-x))+((b-y)*(b-y)));
        cont=x*x+y*y-r*r;
        m=2.0*x;
        n=2.0*y;

        if(x<0&&y<0)
        {
            printf("(x + %.3f)^2 + (y + %.3f)^2 = %.3f^2\n",-x,-y,r);
            if(cont<0)
                printf("x^2 + y^2 + %.3fx + %.3fy - %.3f = 0\n",-m,-n,-cont);
            else if(cont==0)
                printf("x^2 + y^2 + %.3fx + %.3fy = 0\n",-m,-n);
            else
                printf("x^2 + y^2 + %.3fx + %.3fy + %.3f = 0\n",-m,-n,cont);
        }
        else if(x<0&&y>=0)
        {
            printf("(x + %.3f)^2 + (y - %.3f)^2 = %.3f^2\n",-x,y,r);
            if(cont<0)
                printf("x^2 + y^2 + %.3fx - %.3fy - %.3f = 0\n",-m,n,-cont);
            else if(cont==0)
                printf("x^2 + y^2 + %.3fx - %.3fy = 0\n",-m,n);
            else
                printf("x^2 + y^2 + %.3fx - %.3fy + %.3f = 0\n",-m,n,cont);
        }
        else if(x>=0&&y<0)
        {
            printf("(x - %.3f)^2 + (y + %.3f)^2 = %.3f^2\n",x,-y,r);
            if(cont<0)
                printf("x^2 + y^2 - %.3fx + %.3fy - %.3f = 0\n",m,-n,-cont);
            else if(cont==0)
                printf("x^2 + y^2 - %.3fx + %.3fy = 0\n",m,-n);
            else
                printf("x^2 + y^2 - %.3fx + %.3fy + %.3f = 0\n",m,-n,cont);
        }
        else if(x>=0&&y>=0)
        {
            printf("(x - %.3f)^2 + (y - %.3f)^2 = %.3f^2\n",x,y,r);
            if(cont<0)
                printf("x^2 + y^2 - %.3fx - %.3fy - %.3f = 0\n",m,n,-cont);
            else if(cont==0)
                printf("x^2 + y^2 - %.3fx - %.3fy = 0\n",m,n);
            else
                printf("x^2 + y^2 - %.3fx - %.3fy + %.3f = 0\n",m,n,cont);
        }

        printf("\n");
    }
    return 0;
}

Light OJ 1232 (Coin Change (II))

#include<bits/stdc++.h>
#define mod 100000007
using namespace std;
typedef long long ll;
ll arr[10009],coin[1000];
int main()
{
    ll i,j,k,l,m,n,test,make;
    cin>>test;
    for(k=1;k<=test;k++)
    {
        cin>>n>>make;
        memset(arr,0,sizeof(arr));
        for(i=1;i<=n;i++)
        {
            cin>>coin[i];
        }
        arr[0]=1;
        ll sum=0;
        for(i=1;i<=n;i++)
        {
            for(j=coin[i];j<=make;j++)
            {
                arr[j]=(arr[j]%mod)+(arr[j-coin[i]]%mod);
            }
        }
        cout<<"Case "<<k<<": "<<arr[make]%mod<<endl;
    }
    return 0;
}