Friday, 7 August 2015

UVA 167 The Sultan's Successors (UVALive 5227, SCU 1033, HDU 1642, Regionals 1991 >> South Pacific)

///     Raihan Ruhin
///     CSE, Jahangirnagar University.
///     Dhaka-Bangladesh.
///     id: raihanruhin (topcoder / codeforces / codechef / uva), 3235 (lightoj)
///     mail: raihanruhin@ (yahoo / gmail / facebook)
///     blog: ruhinraihan.blogspot.com

#include<bits/stdc++.h>
using namespace std;

#define SET(a) memset(a,-1,sizeof(a))
#define CLR(a) memset(a,0,sizeof(a))
#define PI acos(-1.0)

#define MOD 1000000007
#define MX 100010

int mat[10][10], mx, n;
bool board[10][10];

bool isSafe(int row, int col)
{
    //left
    for(int i=0;i<col;i++)
        if(board[row][i])   return false;
    //upper left
    for(int i=row, j=col;i>=0 && j>=0;i--, j--)
        if(board[i][j])     return false;
    //bottom left
    for(int i=row, j=col;i<n && j>=0;i++, j--)
        if(board[i][j])     return false;
return true;
}

void solveNQ(int col)
{
    if(col>=n)
    {
        int sum=0;
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                if(board[i][j])
                    sum+=mat[i][j];
        mx=max(mx, sum);
    }

    for(int i=0;i<n;i++)
        if(isSafe(i, col))
        {
            board[i][col]=true;
            solveNQ(col+1);
            board[i][col]=false;
        }
return;
}

int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);
    int kk=1, tc, m;
    n=8;
    string s;
    cin>>tc;
    while(tc--)
    {
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                cin>>mat[i][j];
        CLR(board);
        mx=0;
        solveNQ(0);
        //cout<<"Case "<<kk++<<": "<< mx <<"\n";
        cout<<setw(5)<<mx<<"\n";
    }

    return 0;
}

Tuesday, 4 August 2015

UVa 12065 - Permutation Primes (UVALive 3017, Regionals 2004 >> Asia - Dhaka)

///     Raihan Ruhin
///     CSE, Jahangirnagar University.
///     Dhaka-Bangladesh.
///     id: raihanruhin (topcoder / codeforces / codechef / hackerrank / uva / uvalive / spoj), 3235 (lightoj)
///     mail: raihanruhin@ (yahoo / gmail / facebook)
///     blog: ruhinraihan.blogspot.com

#include<bits/stdc++.h>
using namespace std;

#define SET(a) memset(a,-1,sizeof(a))
#define CLR(a) memset(a,0,sizeof(a))
#define PI acos(-1.0)

#define MOD 1000000007
#define MX 1111111

int digit[10], digitLength;
void makeDigit(int n)
{
    digitLength=0;
    while(n)
    {
        digit[digitLength++]=n%10;
        n/=10;
    }
    sort(digit, digit+digitLength);
return;
}

vector<int>prime;
bool status[MX+2];
void PrimeGenerate(int n)
{
    int sq=sqrt(n);
    for(int i=3; i<=sq; i+=2)
    {
        if(!status[i])
            for(int j=i*i; j<=n; j+=(i<<1))
                status[j]=true;
    }
    
    status[0]=status[1]=true;
    for(int i=4;i<=n;i+=2) status[i]=true;
    
    /*prime.push_back(2);
    for(int i=3; i<=n; i+=2)
        if(!stats[i])
            prime.push_back(i);*/
return;
}

int permute(int n)
{
    int num, p;
    makeDigit(n);
    do{
        num=0;
        for(int i=0;i<digitLength;i++)
            num=num*10+digit[i];
        p=abs(n-num)/9;
        if(p<MX && !status[p]) return 1;
    }while(next_permutation(digit, digit+digitLength));
return 0;
}

int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);
    int kk=1, tc, n, m, p, q;
    string s;
    PrimeGenerate(MX);
    cin>>tc;
    while(tc--)
    {
        cin>>p>>q;
        if(p>q) swap(p, q);
        int cnt=0;
        for(int i=p;i<=q;i++)
        {
            if(permute(i))
                cnt++;
        }

        cout<<"Case "<<kk++<<": "<< cnt <<"\n";
    }

    return 0;
}

UVA 10130 SuperSale

///     Raihan Ruhin
///     CSE, Jahangirnagar University.
///     Dhaka-Bangladesh.
///     id: raihanruhin (topcoder / codeforces / codechef / hackerrank / uva / uvalive / spoj), 3235 (lightoj)
///     mail: raihanruhin@ (yahoo / gmail / facebook)
///     blog: ruhinraihan.blogspot.com

#include<bits/stdc++.h>
using namespace std;

#define SET(a) memset(a,-1,sizeof(a))
#define CLR(a) memset(a,0,sizeof(a))
#define PI acos(-1.0)

#define MOD 1000000007
#define MX 100010

int n, dp[1002][32], val[1002], wgt[1002];

int func(int object, int weight)
{
    if(object==n) return 0;
    
    int &ret=dp[object][weight];
    if(ret!=-1) return ret;
    
    ret=func(object+1, weight);
    if(weight>=wgt[object]) 
        ret=max(ret, val[object]+func(object+1, weight-wgt[object]));
return ret;
}

int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);
    int kk=1, tc, m, g, mw;
    string s;
    cin>>tc;
    while(tc--)
    {
        cin>>n;
        for(int i=0;i<n;i++) cin>>val[i]>>wgt[i];
        
        SET(dp);
        int tot=0;
        cin>>g;
        while(g--)
        {
            cin>>mw;
            tot+=func(0, mw);
        }

        //cout<<"Case "<<kk++<<": "<< <<"\n";
        cout<<tot<<"\n";
    }

    return 0;
}

Tuesday, 30 June 2015

UVA 10283 The Kissing Circles

///     Raihan Ruhin
///     CSE, Jahangirnagar University.
///     Dhaka-Bangladesh.
///     id: raihanruhin (topcoder / codeforces / codechef / hackerrank / uva / uvalive / spoj), 3235 (lightoj)
///     mail: raihanruhin@ (yahoo / gmail / facebook)
///     blog: ruhinraihan.blogspot.com

#include<bits/stdc++.h>
using namespace std;

#define SET(a) memset(a,-1,sizeof(a))
#define CLR(a) memset(a,0,sizeof(a))
#define PI acos(-1.0)

#define MOD 1000000007
#define MX 100010


int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);
    int tc, kk=1;
    double R, n, theta, r, midR, area_midR, blue, green, triangleArea, sectorArea;
    string s;
    while(cin>>R>>n)
    {
        if(n==1)
        {
            cout<<R<<" "<<0.0<<" "<<0.0<<"\n";
            continue;
        }
        theta=180.0/n;
        r = R*(sin(theta*PI/180.0)) / (1+sin(theta*PI/180.0));

        midR = R-r;

        triangleArea = midR*cos(theta*PI/180.0)*r;
        //cout<<triangleArea<<endl;
        sectorArea = (90-theta) / 180 * PI * r * r;
        //cout<<sectorArea<<endl;
        blue = n*(triangleArea - sectorArea);
        green = PI*R*R - n*PI*r*r - blue;
        cout<<setprecision(10)<<fixed<<r<<" "<<blue<<" "<<green<<"\n";
    }
return 0;
}