CodeChef : Yet Another Number Game (NUMGAME)


// http://www.codechef.com/problems/NUMGAME/
// Runtime : 0.01s
// Memory : 2.5M
// Tag : Gotcha


// @BEGIN_OF_SOURCE_CODE

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <cctype>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <sstream>
#include <cmath>
#include <bitset>
#include <utility>
#include <set>
#include <numeric>
#define INT_MAX 2147483647
#define INT_MIN -2147483647
#define pi acos(-1.0)
#define N 1000000
#define LL unsigned long long
using namespace std;


int main ()
{
    int testCase;
    scanf ("%d", &testCase);

    while ( testCase-- ) {
        int n;
        scanf ("%d", &n);

        if ( n % 2 ) printf ("BOB\n");
        else printf ("ALICE\n");
    }

	return 0;
}

// @END_OF_SOURCE_CODE

CodeChef : Discrepancies in the Voters List (VOTERS)


// http://www.codechef.com/problems/VOTERS/
// Runtime : 0.52s
// Tag : Sort, Merge Sort

// @BEGIN_OF_SOURCE_CODE

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <cctype>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <sstream>
#include <cmath>
#include <bitset>
#include <utility>
#include <set>
#include <numeric>
#define INT_MAX 2147483647
#define INT_MIN -2147483647
#define pi acos(-1.0)
#define N 1000000
#define LL unsigned long long
using namespace std;


int main ()
{
	int n1, n2, n3;
	scanf ("%d %d %d", &n1, &n2, &n3);

	vector <int> v;
	int input;

	for ( int i = 0; i < n1; i++ ) {
		scanf ("%d", &input);
		v.push_back (input);
	}

	for ( int i = 0; i < n2; i++ ) {
		scanf ("%d", &input);
		v.push_back (input);
	}

	for ( int i = 0; i < n3; i++ ) {
		scanf ("%d", &input);
		v.push_back (input);
	}

	sort (v.begin (), v.end ());

	int in = 0;
	vector <int> output;

	while ( in < v.size () - 1 ) {
		if ( v [in] == v [in + 1] ) {
			output.push_back (v [in]);
			in += 2;

			if ( in != v.size () && v [in - 1] == v [in] ) in++;
		}
		else in++;
	}

	printf ("%d\n", output.size ());

	for ( int i = 0; i < output.size (); i++ ) printf ("%d\n", output [i]);


	return 0;
}

// @END_OF_SOURCE_CODE

CodeChef : Permutation Cycles (PCYCLE)


// http://www.codechef.com/problems/PCYCLE/
// Runtime : 0.00s
// Memory : 2.6M

// @BEGIN_OF_SOURCE_CODE

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <cctype>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <sstream>
#include <cmath>
#include <bitset>
#include <utility>
#include <set>
#include <numeric>
#define INT_MAX 2147483647
#define INT_MIN -2147483647
#define pi acos(-1.0)
#define N 1000000
#define LL unsigned long long
using namespace std;

int a [1000 + 5];
bool vis [1000 + 5];
vector <int> v [1000 + 5];
int in = 0;

void traverse (int s)
{
    while ( !vis [s] ) {
        v [in].push_back (s);
        vis [s] = true;
        s = a [s];
    }

    v [in].push_back (s);
    in++;
}

int main ()
{
    int n;
    scanf ("%d", &n);

    for ( int i = 1; i <= n; i++ ) scanf ("%d", &a [i]);

    memset (vis, false, sizeof (vis));

    for ( int i = 1; i <= n; i++ ) if ( !vis [i] ) traverse (i);

    printf ("%d\n", in);

    for ( int i = 0; i < in; i++ ) {
        printf ("%d", v [i] [0]);
        for ( unsigned int j = 1; j < v [i].size (); j++ ) printf (" %d", v [i] [j]);
        printf ("\n");
    }

	return 0;
}

// @END_OF_SOURCE_CODE

CodeChef : Stone Game (RESN04)


// http://www.codechef.com/problems/RESN04/

// @BEGIN_OF_SOURCE_CODE

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <cctype>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <sstream>
#include <cmath>
#include <bitset>
#include <utility>
#include <set>
#include <numeric>
#define INT_MAX 2147483647
#define INT_MIN -2147483647
#define pi acos(-1.0)
#define N 1000000
#define LL unsigned long long
using namespace std;


int main ()
{
    int testCase;
    scanf ("%d", &testCase);

    while ( testCase-- ) {
        int n;
        scanf ("%d", &n);

        int pile;
        int moves = 0;

        for ( int i = 0; i < n; i++ ) {
            scanf ("%d", &pile);
            moves += pile / (i + 1);
        }

        if ( moves % 2 ) printf ("ALICE\n");
        else printf ("BOB\n");
    }

	return 0;
}

// @END_OF_SOURCE_CODE

CodeChef : Odd (DCE05)


// http://www.codechef.com/problems/DCE05

// @BEGIN_OF_SOURCE_CODE

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <cctype>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <sstream>
#include <cmath>
#include <bitset>
#include <utility>
#include <set>
#include <numeric>
#define INT_MAX 2147483647
#define INT_MIN -2147483647
#define pi acos(-1.0)
#define N 1000000
#define LL unsigned long long
using namespace std;


int main ()
{
    int testCase;
	scanf ("%d", &testCase);

	while ( testCase-- ) {
		unsigned int n;
		scanf ("%u", &n);
		for ( int i = 0; i < 32; i++ ) {
			if ( pow (2, i) > n ) {
				printf ("%d\n", (int)pow (2, i - 1));
				break;
			}
		}
	}

	return 0;
}

// @END_OF_SOURCE_CODE

CodeChef : Problem 3 (CMB03)

// @BEGIN_OF_SOURCE_CODE

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <cctype>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <sstream>
#include <cmath>
#include <bitset>
#include <utility>
#include <set>
#define INT_MAX 2147483647
#define INT_MIN -2147483648
#define pi acos(-1.0)
#define N 1000000
#define LL long long
using namespace std;


int main ()
{
    int testCase;
    scanf ("%d", &testCase);

    while ( testCase-- ) {
        string a;
        string b;

        cin >> a >> b;

        if ( a.find (b) != string::npos ) printf ("1\n");
        else printf ("0\n");
    }

	return 0;
}

// @END_OF_SOURCE_CODE

CodeChef : Anagram (TECH04)

Title : Anagram

Link : http://www.codechef.com/problems/TECH04/

Problem code: TECH04

Tricky Lines :

  1. The strings would consist of only letters ‘a’-'z’
  2. You have to print “YES” if one string is an anagram of the other or “NO” otherwise.

Analysis :

  1. Data type : string / char array
  2. sort the two input string
  3. now if strings are exactly same then output “YES”

Runtime : 0.02s

Critical Input : 
5
boom bmmo
aaab baab
tuple tuple
forget forgeo
tuple tuples

output :
NO
NO
YES
NO
NO

Solution :

// @BEGIN_OF_SOURCE_CODE

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <cctype>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <sstream>
#include <cmath>
#include <bitset>
#include <utility>
#include <set>
#define INT_MAX 2147483647
#define INT_MIN -2147483648
#define pi acos(-1.0)
#define N 1000000
#define LL long long
using namespace std;

int main ()
{
    int testCase;
    scanf ("%d", &testCase);

    while ( testCase-- ) {
        string first, second;
        cin >> first >> second;

        sort (first.begin (), first.end ());
        sort (second.begin (), second.end ());

        if ( first == second ) printf ("YES\n");
        else printf ("NO\n");
    }

	return 0;
}

// @END_OF_SOURCE_CODE

CodeChef : Problem 1 (CMB01)

Title : Problem 1

Link : http://www.codechef.com/problems/CMB01/

Problem code: CMB01

Tricky Lines :

  1. if the number ends with a zero, the zero is lost by reversing
  2. reversed number never has any trailing zeros
  3. we must assume that no zeros were lost by reversing
  4. Omit any leading zeros in the output

Analysis :

  1. reverse the two input number
  2. add them
  3. reverse the result
  4. omit preceding zeros if any

Runtime : 0.00s

Critical Input : 
5
50 50
120 210
1100 1200
2000 3000
2222 3210

Critical Output : 
1
33
23
5
5432

Solution :

// @BEGIN_OF_SOURCE_CODE

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <cctype>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <sstream>
#include <cmath>
#include <bitset>
#include <utility>
#include <set>
#define INT_MAX 2147483647
#define INT_MIN -2147483648
#define pi acos(-1.0)
#define N 1000000
#define LL long long
using namespace std;

int main ()
{
    int testCase;
    scanf ("%d", &testCase);

    while ( testCase-- ) {
        char fir [20], sec [20], res [50];
        scanf ("%s %s", fir, sec);

        reverse (fir, fir + strlen (fir));
        reverse (sec, sec + strlen (sec));

        sprintf (res, "%d", atoi (fir) + atoi (sec));

        reverse (res, res + strlen (res));

        printf ("%d\n", atoi (res));
    }

	return 0;
}

// @END_OF_SOURCE_CODE

CodeChef (POKER)

// http://www.codechef.com/problems/POKER/

#include <stdio.h>

int main ()
{
    int dataset;
    scanf ("%d", &dataset);
    getchar ();

    while ( dataset-- ) {
        char input [20];

        gets (input);

        int rank [14] = {0};
        int suit [4] = {0};

        for ( int i = 0; i < 13; i += 3 ) {
            if ( input [i] >= 50 && input [i] <= 57 )
                rank [input [i] - 48]++;
            else if ( input [i] == 'A' )
                rank [1]++;
            else if ( input [i] == 'T' )
                rank [10]++;
            else if ( input [i] == 'J' )
                rank [11]++;
            else if ( input [i] == 'Q' )
                rank [12]++;
            else if ( input [i] == 'K' )
                rank [13]++;
        }

        for ( int i = 1; i < 14 ; i += 3 ) {
            if ( input [i] == 'S' )
                suit [0]++;
            else if ( input [i] == 'H' )
                suit [1]++;
            else if ( input [i] == 'D' )
                suit [2]++;
            else if ( input [i] == 'C' )
                suit [3]++;
        }

        bool flag = false;

        switch (true) {
            case 1 :
                if ( (suit [0] == 5 || suit [1] == 5 || suit [2] == 5 || suit [3] == 5)
                && (rank [1] && rank [10] && rank [11] && rank [12] && rank [13]) ) {
                    printf ("royal flush\n");
                    break;
                }

            case 2 :
                if ( suit [0] == 5 || suit [1] == 5 || suit [2] == 5 || suit [3] == 5 ) {

                    for ( int i = 1; i <= 9; i++ ) {
                        if ( rank [i] && rank [i + 1] && rank [i + 2] && rank [i + 3] && rank [i + 4]) {
                            printf ("straight flush\n");
                            flag = true;
                        }
                    }

                    if ( flag )
                        break;
                }

            case 3 :
                for ( int i = 1; i <= 13; i++ ) {
                    if ( rank [i] == 4 ) {
                        printf ("four of a kind\n");
                        flag = true;
                    }
                }

                if ( flag )
                    break;

            case 4 :
                for ( int i = 1; i <= 13; i++ ) {
                    for ( int j = 1; j <= 13; j++ ) {
                        if ( rank [i] + rank [j] == 5 && (rank [i] - rank [j] == 1 || rank [i] - rank [j] == -1) ) {
                            printf ("full house\n");
                            flag = true;
                            i = j = 13;
                        }
                    }
                }

                if ( flag )
                    break;

            case 5 :
                if ( suit [0] == 5 || suit [1] == 5 || suit [2] == 5 || suit [3] == 5 ) {
                    printf ("flush\n");
                    break;
                }

            case 6 :
                for ( int i = 1; i <= 9; i++ ) {
                    if ( rank [i] && rank [i + 1] && rank [i + 2] && rank [i + 3] && rank [i + 4]) {
                        printf ("straight\n");
                        flag = true;
                    }
                }

                if ( flag )
                    break;

            case 7 :
                for ( int i = 1; i <= 13; i++ ) {
                    if ( rank [i] == 3 ) {
                        printf ("three of a kind\n");
                        flag = true;
                    }
                }

                if ( flag )
                    break;

            case 8 :
                for ( int i = 1; i <= 13; i++ ) {
                    for ( int j = 1; j <= 13; j++ ) {
                        if ( i != j && rank [i] + rank [j] == 4 && (rank [i] - rank [j] == 0) ) {
                            printf ("two pairs\n");
                            flag = true;
                            i = j = 13;
                        }
                    }
                }

                if ( flag )
                    break;

            case 9 :
                for ( int i = 1; i <= 13; i++ ) {
                    if ( rank [i] == 2 ) {
                        printf ("pair\n");
                        flag = true;
                    }
                }

                if ( flag )
                    break;

            default :
                printf ("high card\n");
        }

    }

    return 0;
}

CodeChef (EASYPROB)

http://www.codechef.com/problems/EASYPROB/

137=2(2(2)+2+2(0))+2(2+2(0))+2(0)
1315=2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
73=2(2(2)+2)+2(2+2(0))+2(0)
136=2(2(2)+2+2(0))+2(2+2(0))
255=2(2(2)+2+2(0))+2(2(2)+2)+2(2(2)+2(0))+2(2(2))+2(2+2(0))+2(2)+2+2(0)
1384=2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2)+2(2(2)+2(0))+2(2+2(0))
16385=2(2(2+2(0))+2(2)+2)+2(0)

Follow

Get every new post delivered to your Inbox.

Join 48 other followers