Advertisement
josiftepe

Untitled

Apr 20th, 2021
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.27 KB | None | 0 0
  1. //Blagoja Mladenov
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. int min(int a, int b) {
  7. if(a < b) {
  8. return a;
  9. }
  10. return b;
  11. }
  12. int main() {
  13. char *c;
  14. int i;
  15. int j;
  16. c = (char*) malloc(3 * sizeof(char));
  17. int **mat;
  18. mat = (int **)malloc(2000 * sizeof(int *));
  19. for(i = 0; i < 2000; i++) {
  20. *(mat + i) = (int*) malloc(2000 * sizeof(int));
  21. }
  22. int *sz = (int*)malloc(2000 * sizeof(int));
  23. for(i = 0; i < 2000; i++) {
  24. *(sz + i) = 0;
  25. }
  26. int r = 0;
  27. while(1) {
  28. scanf("%s", c);
  29. if(strcmp(c, "END") == 0) {
  30. break;
  31. }
  32. if(strcmp(c, "AFR") == 0) {
  33. int n;
  34. scanf("%d", &n);
  35. int *tmp = (int*) malloc(n * sizeof(int));
  36. for(i = 0; i < n; i++) {
  37. scanf("%d", (tmp + i));
  38. }
  39. int **new = (int**)malloc((r + 1) * sizeof(int*));
  40. for(i = 0; i < r; i++) {
  41. *(new + i + 1) = (int*)malloc((*(sz + i)) * sizeof(int));
  42. for(j = 0; j < *(sz + i); j++) {
  43. *(*(new + i + 1) + j) = *(*(mat + i) + j);
  44. }
  45. }
  46. *(new) = (int*)malloc(n * sizeof(int));
  47. for(i = 0; i < n; i++) {
  48. *(*(new + 0) + i) = *(tmp + i);
  49. }
  50. for(i = r; i >= 0; i--) {
  51. *(sz + i) = *(sz + i - 1);
  52. }
  53. *sz = n;
  54. r++;
  55. for(i = 0; i < r; i++) {
  56. for(j = 0; j < *(sz + i); j++) {
  57. *(*(mat + i) + j) = *(*(new + i) + j);
  58. }
  59. }
  60. free(tmp);
  61. for(i = 0; i < r; i++) {
  62. free(*(new + i));
  63. }
  64. free(new);
  65. }
  66. else if(strcmp(c, "ALR") == 0) {
  67. int n;
  68. scanf("%d", &n);
  69. for(i = 0; i < n; i++) {
  70. scanf("%d", (*(mat + r) + i));
  71. }
  72. *(sz + r) = n;
  73. r++;
  74.  
  75. }
  76. else if(strcmp(c, "DFR") == 0) {
  77. if(r > 0) {
  78. for(i = 0; i < r - 1; i++) {
  79. *(sz + i) = *(sz + i + 1);
  80. for(j = 0; j < *(sz + i); j++) {
  81. *(*(mat + i) + j) = *(*(mat + i + 1) + j);
  82. }
  83. }
  84. r--;
  85. *(sz + r) = 0;
  86. }
  87. }
  88. else if(strcmp(c, "DLR") == 0) {
  89. if(r > 0) {
  90. r--;
  91. *(sz + r) = 0;
  92. }
  93. }
  94. else if(strcmp(c, "PRT") == 0) {
  95. printf("%d\n", r);
  96. for(i = 0; i < r; i++) {
  97. printf("%d ", *(sz + i));
  98. for(j = 0; j < *(sz + i); j++) {
  99. printf("%d ", *(*(mat + i) + j));
  100. }
  101. printf("\n");
  102. }
  103. }
  104. else if(strcmp(c, "AFC") == 0) {
  105. int n;
  106. scanf("%d", &n);
  107. int *a = (int*)malloc(n * sizeof(int));
  108. for(i = 0; i < n; i++) {
  109. scanf("%d", (a + i));
  110. }
  111. for(i = 0; i < n; i++) {
  112. if(*(sz + i) > 0) {
  113. for(j = *(sz + i); j > 0; j--) {
  114. *(*(mat + i) + j) = *(*(mat + i) + j - 1);
  115. }
  116. *(*(mat + i)) = *(a + i);
  117. *(sz + i) += 1;
  118. }
  119. else {
  120. *(sz + i) = 1;
  121. *(*(mat + i)) = *(a + i);
  122. r++;
  123. }
  124. }
  125. free(a);
  126. }
  127. else if(strcmp(c, "ALC") == 0) {
  128. int n;
  129. scanf("%d", &n);
  130. int *a = (int*)malloc(n * sizeof(int));
  131. for(i = 0; i < n; i++) {
  132. scanf("%d", (a + i));
  133. }
  134. for(i = 0; i < n; i++) {
  135. if(*(sz + i) > 0) {
  136. *(*(mat + i) + *(sz + i)) = *(a + i);
  137. *(sz + i) += 1;
  138. }
  139. else {
  140. *(sz + i) = 1;
  141. *(*(mat + i)) = *(a + i);
  142. r++;
  143. }
  144. }
  145. }
  146. else if(strcmp(c, "DFC") == 0) {
  147. if(r == 0) continue;
  148. for(i = 0; i < r; i++) {
  149. *(sz + i) -= 1;
  150. }
  151. int newr = r;
  152. for(i = 0; i < r; i++) {
  153. for(j = 0; j < *(sz + i); j++) {
  154. *(*(mat + i) + j) = *(*(mat + i) + j + 1);
  155. }
  156. if(*(sz + i) == 0) {
  157. newr--;
  158. }
  159. }
  160. r = newr;
  161. }
  162. else if(strcmp(c, "DLC") == 0) {
  163. if(r == 0) continue;
  164. int newr = r;
  165. for(i = 0; i < r; i++) {
  166. *(sz + i) -= 1;
  167. if(*(sz + i) == 0) {
  168. newr--;
  169. }
  170. }
  171. r = newr;
  172. }
  173. else if(strcmp(c, "RMR") == 0) {
  174. int ind;
  175. scanf("%d", &ind);
  176. if(r == 0) continue;
  177.  
  178. if(ind >= 0 && ind < r) {
  179. for(i = ind; i + 1 < r; i++) {
  180. *(sz + i) = *(sz + i + 1);
  181. for(j = 0; j < *(sz + i); j++) {
  182. *(*(mat + i) + j) = *(*(mat + i + 1) + j);
  183. }
  184. }
  185. r--;
  186. }
  187. }
  188. else if(strcmp(c, "RMC") == 0) {
  189. int ind;
  190. scanf("%d", &ind);
  191. if(r == 0) continue;
  192.  
  193. int newsz = 0, *tmp = (int*)malloc(r * sizeof(int));
  194. int **new = (int**)malloc(2000 * sizeof(int*));
  195. for(i = 0; i < 2000; i++) {
  196. *(new + i) = (int*)malloc(2000 * sizeof(int));
  197. }
  198. for(i = 0; i < r; i++) {
  199. int ok = 0;
  200. if(*(sz + i) == 1) continue;
  201.  
  202. for(j = 0; j < *(sz + i); j++) {
  203. if(j == ind) {
  204. ok = 1;
  205. continue;
  206. }
  207. *(*(new + newsz) + j) = *(*(mat + i) + j);
  208. }
  209. if(ok == 1) {
  210. if(*(sz + i) > 1) {
  211. *(tmp + newsz) = *(sz + i) - 1;
  212. newsz++;
  213. }
  214. }
  215. else {
  216. *(tmp + newsz) = *(sz + i);
  217. newsz++;
  218. }
  219.  
  220. }
  221. r = newsz;
  222. for(i = 0; i < r; i++) {
  223. *(sz + i) = *(tmp + i);
  224. }
  225. for(i = 0; i < r; i++) {
  226. for(j = 0; j < *(sz + i); j++) {
  227. *(*(mat + i) + j) = *(*(new + i) + j);
  228. }
  229. }
  230. free(tmp);
  231. for(i = 0; i < 2000; i++) {
  232. free(*(new + i));
  233. }
  234. free(new);
  235. }
  236.  
  237.  
  238.  
  239. }
  240.  
  241. free(c);
  242. free(sz);
  243. for(i = 0; i < 2000; i++) {
  244. free(*(mat + i));
  245. }
  246. free(mat);
  247.  
  248. return 0;
  249. }
  250. /*
  251. AFC 3 1 2 3
  252. PRT
  253. AFC 5 1 2 3 4 5
  254. **/
  255.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement