Sunday, March 13, 2011

UVa_10038_Jolly_Jumpers.cpp

Problem Links:

poj2575, uva10038,

Problem:




Problem E: Jolly Jumpers

A sequence of n > 0 integers is called a jolly jumper if the absolute values of the difference between successive elements take on all the values 1 through n-1. For instance,
1 4 2 3
is a jolly jumper, because the absolutes differences are 3, 2, and 1 respectively. The definition implies that any sequence of a single integer is a jolly jumper. You are to write a program to determine whether or not each of a number of sequences is a jolly jumper.

Input

Each line of input contains an integer n <= 3000 followed by n integers representing the sequence.

Output

For each line of input, generate a line of output saying "Jolly" or "Not jolly".

Sample Input

4 1 4 2 3
5 1 4 2 -1 6

Sample Output

Jolly
Not jolly

Solution:

Data structure: sets;

Source Code:

//Mon Mar 14 01:04:00 CDT 2011
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>

using namespace std;

int main(int argc, char* argv[])
{
    //freopen("input.in", "r", stdin);
    //freopen("output.out", "w", stdout);
    int N;
    while (cin >> N)
    {
        vector<int> v(N, 0);
        set<int> diff;
        set<int>::iterator it;
        for (int i = 0; i < N; i++)
            cin >> v[i];
        for (int i = 1; i < N; i++)
            diff.insert(abs(v[i] - v[i - 1]));
     
        if ((int) diff.size() != N - 1)
        {
            cout << "Not jolly" << endl;
            continue;
        }

        int count = 1;
        bool flag = true;
        for (it = diff.begin(); it != diff.end(); it++, count++)
        {
            if ((int) (*it) != count)
            {
                flag = false;
                break;
            }
        }
        if (flag && count == N)
            cout << "Jolly" << endl;
        else
            cout << "Not jolly" << endl;
    }
    //fclose(stdin);
    //fclose(stdout);
    return 0;
}

No comments :