Problem:
Score : 200 points

Problem Statement

There is a kangaroo at coordinate 0 on an infinite number line that runs from left to right, at time 0.
During the period between time i-1 and time i, the kangaroo can either stay at his position, or perform a jump of length exactly i to the left or to the right.
That is, if his coordinate at time i-1 is x, he can be at coordinate x-i, x or x+i at time i.
The kangaroo's nest is at coordinate X, and he wants to travel to coordinate X as fast as possible.
Find the earliest possible time to reach coordinate X.

Constraints

X is an integer.

1≤X≤10^9

Input

The input is given from Standard Input in the following format:

X

Output

Print the earliest possible time for the kangaroo to reach coordinate X.

Sample Input 1

6

Sample Output 1

3

The kangaroo can reach his nest at time 3 by jumping to the right three times, which is the earliest possible time.

Sample Input 2

2

Sample Output 2

2

He can reach his nest at time 2 by staying at his position during the first second, and jumping to the right at the next second.

Sample Input 3

11

Sample Output 3

5

Solution in C# (Mono 4.6.2.0) (judge verdict: Time Limit Exceeded)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            int X = int.Parse(Console.ReadLine());
            int ret = 1000000000 + 1;
            int tl = 0;

            int i = 1;
            do
            {
                tl = i*(i + 1) / 2;
                if (tl >= X) break;
                else i++;
            } while (true);
            jump(X, 1, 0, ref ret,i);

            Console.WriteLine(ret);
            Console.ReadLine();
        }

        static int jump(int goal,int time,int position,ref int ret,int tl)
        {
            if (time-1 <= tl)
            {
                if (goal - position != 0)
                {
                    jump(goal, time + 1, position + time, ref ret, tl);
                    jump(goal, time + 1, position, ref ret, tl);
                    //                    jump(goal, time + 1, position - time,ref ret);
                }
                else
                {
                    if (ret > time - 1) ret = time - 1;
                    return 0;
                }
            }
            return 0;
        }
    }
}