using System; using System.Collections.Generic; using System.Linq; // https://yukicoder.me/problems/no/1021 class Program { static string InputPattern = "InputX"; static List GetInputList() { var WillReturn = new List(); if (InputPattern == "Input1") { WillReturn.Add("4 3"); WillReturn.Add("3 1 4 1"); WillReturn.Add("LRR"); //0 0 4 5 } else if (InputPattern == "Input2") { WillReturn.Add("2 7"); WillReturn.Add("1 8"); WillReturn.Add("LLLLLLL"); //9 0 } else if (InputPattern == "Input3") { WillReturn.Add("5 6"); WillReturn.Add("314 0 1 5 9"); WillReturn.Add("RLRLLR"); //0 314 1 14 0 } else { string wkStr; while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr); } return WillReturn; } static void Main() { List InputList = GetInputList(); long[] AArr = InputList[1].Split(' ').Select(pX => long.Parse(pX)).ToArray(); var InsDeque = new Deque(); foreach (long EachA in AArr) { InsDeque.PushBack(EachA); } string S = InputList[2]; foreach (char EachChar in S) { if (EachChar == 'L') { long FrontVal = InsDeque[0]; InsDeque.PopFront(); InsDeque[0] += FrontVal; InsDeque.PushBack(0); } if (EachChar == 'R') { long BackVal = InsDeque[InsDeque.Count - 1]; InsDeque.PopBack(); InsDeque[InsDeque.Count - 1] += BackVal; InsDeque.PushFront(0); } } var AnswerList = new List(); for (int I = 0; I <= InsDeque.Count - 1; I++) { AnswerList.Add(InsDeque[I]); } Console.WriteLine(LongEnumJoin(" ", AnswerList)); } // セパレータとLong型の列挙を引数として、結合したstringを返す static string LongEnumJoin(string pSeparater, IEnumerable pEnum) { string[] StrArr = Array.ConvertAll(pEnum.ToArray(), pX => pX.ToString()); return string.Join(pSeparater, StrArr); } } #region Deque internal class Deque { T[] buf; int offset, count, capacity; internal int Count { get { return count; } } internal Deque(int cap) { buf = new T[capacity = cap]; } internal Deque() { buf = new T[capacity = 16]; } internal T this[int index] { get { return buf[GetIndex(index)]; } set { buf[GetIndex(index)] = value; } } private int GetIndex(int index) { if (index >= capacity) throw new IndexOutOfRangeException("out of range"); int ret = index + offset; if (ret >= capacity) ret -= capacity; return ret; } internal void PushFront(T item) { if (count == capacity) Extend(); if (--offset < 0) offset += buf.Length; buf[offset] = item; count++; } internal T PopFront() { if (count == 0) throw new InvalidOperationException("collection is empty"); count--; T ret = buf[offset++]; if (offset >= capacity) offset -= capacity; return ret; } internal void PushBack(T item) { if (count == capacity) Extend(); int id = count + offset; count++; if (id >= capacity) id -= capacity; buf[id] = item; } internal T PopBack() { if (count == 0) throw new InvalidOperationException("collection is empty"); return buf[GetIndex(--count)]; } internal void Insert(int index, T item) { if (index > count) throw new IndexOutOfRangeException(); this.PushFront(item); for (int i = 0; i < index; i++) this[i] = this[i + 1]; this[index] = item; } internal T RemoveAt(int index) { if (index < 0 || index >= count) throw new IndexOutOfRangeException(); T ret = this[index]; for (int i = index; i > 0; i--) this[i] = this[i - 1]; this.PopFront(); return ret; } private void Extend() { T[] newBuffer = new T[capacity << 1]; if (offset > capacity - count) { int len = buf.Length - offset; Array.Copy(buf, offset, newBuffer, 0, len); Array.Copy(buf, 0, newBuffer, len, count - len); } else Array.Copy(buf, offset, newBuffer, 0, count); buf = newBuffer; offset = 0; capacity <<= 1; } internal T[] Items//デバッグ時に中身を調べるためのプロパティ { get { T[] a = new T[count]; for (int i = 0; i < count; i++) a[i] = this[i]; return a; } } } #endregion