Beispiel #1
0
    static object Solve()
    {
        var s = Console.ReadLine();

        var q   = new DQ <char>();
        var rev = false;

        foreach (var c in s)
        {
            if (c == 'R')
            {
                rev = !rev;
            }
            else
            {
                if (rev)
                {
                    if (q.Length > 0 && q.First == c)
                    {
                        q.PopFirst();
                    }
                    else
                    {
                        q.PushFirst(c);
                    }
                }
                else
                {
                    if (q.Length > 0 && q.Last == c)
                    {
                        q.PopLast();
                    }
                    else
                    {
                        q.PushLast(c);
                    }
                }
            }
        }

        if (rev)
        {
            return(string.Join("", Enumerable.Range(0, q.Length).Select(i => q[i]).Reverse()));
        }
        else
        {
            return(string.Join("", Enumerable.Range(0, q.Length).Select(i => q[i])));
        }
    }
Beispiel #2
0
    static void Main()
    {
        var n  = int.Parse(Console.ReadLine());
        var qs = new int[n].Select(_ => Console.ReadLine().Split());

        var dq = new DQ <int>(Math.Min(1000000, n));

        var actions = new Dictionary <string, Action <string[]> >();

        actions["insert"]      = q => dq.PushFirst(int.Parse(q[1]));
        actions["delete"]      = q => dq.RemoveFirst(int.Parse(q[1]));
        actions["deleteFirst"] = q => dq.PopFirst();
        actions["deleteLast"]  = q => dq.PopLast();

        foreach (var q in qs)
        {
            actions[q[0]](q);
        }
        Console.WriteLine(string.Join(" ", Enumerable.Range(0, dq.Length).Select(i => dq[i])));
    }
Beispiel #3
0
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());

        var r  = new List <int>();
        var dq = new DQ <int>();

        for (int k = n; k > 0; k--)
        {
            var q = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
            if (q[0] == 0)
            {
                if (q[1] == 0)
                {
                    dq.PushFirst(q[2]);
                }
                else
                {
                    dq.PushLast(q[2]);
                }
            }
            else if (q[0] == 1)
            {
                r.Add(dq[q[1]]);
            }
            else
            {
                if (q[1] == 0)
                {
                    dq.PopFirst();
                }
                else
                {
                    dq.PopLast();
                }
            }
        }
        Console.WriteLine(string.Join("\n", r));
    }
Beispiel #4
0
    static void Main()
    {
        var n = int.Parse(Console.ReadLine());
        var s = Console.ReadLine();

        var q     = new DQ <int>();
        var stack = new Stack <int>();

        int RemoveAndGetFirst(int k)
        {
            for (int i = 0; i < k; i++)
            {
                stack.Push(q.PopFirst());
            }
            var r = q.PopFirst();

            for (int i = 0; i < k; i++)
            {
                q.PushFirst(stack.Pop());
            }
            return(r);
        }

        int RemoveAndGetLast(int k)
        {
            for (int i = 0; i < k; i++)
            {
                stack.Push(q.PopLast());
            }
            var r = q.PopLast();

            for (int i = 0; i < k; i++)
            {
                q.PushLast(stack.Pop());
            }
            return(r);
        }

        Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput())
        {
            AutoFlush = false
        });
        for (int i = 0; i < n; i++)
        {
            var c = s[i];

            if (c == 'L')
            {
                q.PushFirst(i + 1);
            }
            else if (c == 'R')
            {
                q.PushLast(i + 1);
            }
            else if (c < 'D')
            {
                var k = c - 'A';
                if (k < q.Length)
                {
                    Console.WriteLine(RemoveAndGetFirst(k));
                }
                else
                {
                    Console.WriteLine("ERROR");
                }
            }
            else
            {
                var k = c - 'D';
                if (k < q.Length)
                {
                    Console.WriteLine(RemoveAndGetLast(k));
                }
                else
                {
                    Console.WriteLine("ERROR");
                }
            }
        }
        Console.Out.Flush();
    }