fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7.  
  8. class Deque{
  9. private int[] a = new int [100];
  10. private int size_;
  11. private int front_;
  12. private int back_;
  13. private int capacity;
  14. private void resize(int newcapacity){ //Функция изменения размера.
  15. int[] tmp = new int [newcapacity]; //Создаем новый динамический массив с новой размерностью
  16. int j = front_; //Присваиваем начальное значение счетчику.
  17. for(int i = 0; j!= back_; ++i){ //Продвигаемся по деку, пока счетчик не будет равен позиции последнего элемента.
  18. tmp[i] = a[j];
  19. j = (j+1)%capacity;
  20. }
  21. tmp[size_ - 1] = a[back_]; //Так как в цикле перенос последнего элемента из старого массива в новый не произошел, вручную переносим последний элемент старого массива.
  22. a = tmp; //Присваиваем указателю на старый массив указатель на новый массив.
  23. capacity = newcapacity; //Меняем значение вместимости.
  24. front_ = 0; //Теперь первый элемент нового массива стоит на нулевой позиции.
  25. back_ = size_ - 1; //А последний - на позиции на единицу меньшей чем кол-во элементов.
  26. }
  27. public Deque()
  28. {
  29. size_ = 0; front_ = 1; back_ = 0; capacity = 100;
  30. }
  31. public void push_back(int b){
  32. if(size_ == capacity){
  33. this.resize(2*capacity);
  34. }
  35. back_ = (back_ + 1)%capacity;
  36. a[back_] = b;
  37. size_++;
  38. }
  39. public void push_front(int b){
  40. if(size_ == capacity){
  41. this.resize(2*capacity);
  42. }
  43. front_ = (front_ - 1 + capacity)%capacity;
  44. a[front_] = b;
  45. size_++;
  46. }
  47. public void pop_back(){
  48. back_ = (back_ - 1 + capacity)%capacity;
  49. size_--;
  50. }
  51. public void pop_front(){
  52. front_ = (front_ + 1)%capacity;
  53. size_--;
  54. }
  55. public int size(){
  56. return size_;
  57. }
  58. public int back(){
  59. return a[back_];
  60. }
  61. public int front(){
  62. return a[front_];
  63. }
  64. public void clear(){
  65. back_ = 0;
  66. front_ = 1;
  67. size_ = 0;
  68. }
  69. };
  70.  
  71. /* Name of the class has to be "Main" only if the class is public. */
  72. public class Main
  73. {
  74. public static void main (String[] args) throws java.lang.Exception
  75. {
  76. Scanner in = new Scanner(System.in);
  77. PrintWriter out = new PrintWriter(System.out);
  78. Deque a = new Deque();
  79. String s;
  80. String[] oper = {"push_back", "push_front", "pop_back", "pop_front", "front", "back", "size", "clear", "exit"};
  81. // System.out.println(oper[0]);
  82. int n;
  83. am:while(true){
  84. s = in.next();
  85. //System.out.println(s);
  86. //System.out.println(s.equals(oper[6]));
  87. if(s.equals(oper[0])){
  88. n = in.nextInt();
  89. a.push_back(n);
  90. out.println("ok");
  91. }
  92. else if(s.equals(oper[1])){
  93. n = in.nextInt();
  94. a.push_front(n);
  95. out.println("ok");
  96. }
  97. else if(s.equals(oper[2])){
  98. if(a.size() != 0){
  99. out.println(a.back());
  100. a.pop_back();
  101. }
  102. else{
  103. out.println("error");
  104. }
  105. }
  106. else if(s.equals(oper[3])){
  107. if(a.size() != 0){
  108. out.println(a.front());
  109. a.pop_front();
  110. }
  111. else{
  112. out.println("error");
  113. }
  114. }
  115. else if(s.equals(oper[4])){
  116. if(a.size() != 0){
  117. out.println(a.front());
  118. }
  119. else{
  120. out.println("error");
  121. }
  122. }
  123. else if(s.equals(oper[5])){
  124. if(a.size() != 0){
  125. out.println(a.back());
  126. }
  127. else{
  128. out.println("error");
  129. }
  130. }
  131. else if(s.equals(oper[6])){
  132. out.println(a.size());
  133. }
  134. else if(s.equals(oper[7])){
  135. out.println("ok");
  136. a.clear();
  137. }
  138. else if(s.equals(oper[8])){
  139. out.println("bye");
  140. //System.exit(0);
  141. break am;
  142. }
  143. }
  144. out.flush();
  145. }
  146. }
Success #stdin #stdout 0.15s 321280KB
stdin
size
push_back 1
front
back
size
push_back 2
size
push_front 3
size
exit
size
stdout
0
ok
1
1
1
ok
2
ok
3
bye