Advertisement
josiftepe

Untitled

Apr 19th, 2021
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.12 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. for(i = 0; i < r; i++) {
  108. for(j = *(sz + i); j > 0; j--) {
  109. *(*(mat + i) + j) = *(*(mat + i) + j - 1);
  110. }
  111. *(sz + i) += 1;
  112. }
  113. for(i = 0; i < min(n, r); i++) {
  114. scanf("%d", *(mat + i));
  115. }
  116. if(n > r) {
  117. for(i = r; i < n; i++) {
  118. *(sz + i) = 1;
  119. scanf("%d", *(mat + i));
  120. }
  121. r = n;
  122. }
  123. }
  124. else if(strcmp(c, "ALC") == 0) {
  125. int n;
  126. scanf("%d", &n);
  127. for(i = 0; i < min(r, n); i++) {
  128. scanf("%d", (*(mat + i) + *(sz + i)));
  129. *(sz + i) += 1;
  130. }
  131. if(n > r) {
  132. for(i = r; i < n; i++) {
  133. *(sz + i) = 1;
  134. scanf("%d", *(mat + i));
  135. }
  136. r = n;
  137. }
  138. }
  139. else if(strcmp(c, "DFC") == 0) {
  140. int **new = (int**)malloc(2000 * sizeof(int*));
  141. for(i = 0; i < 2000; i++) {
  142. *(new + i) = (int*)malloc(2000 * sizeof(int));
  143. }
  144. int newsz = 0, *tmp = (int*)malloc(r * sizeof(int));
  145. for(i = 0; i < r; i++) {
  146. for(j = 1; j < *(sz + i); j++) {
  147. *(*(new + i) + j - 1) = *(*(mat + i) + j);
  148. }
  149. if(*(sz + i) > 1) {
  150. *(tmp + newsz) = *(sz + i) - 1;
  151. newsz++;
  152. }
  153. }
  154. r = newsz;
  155. for(i = 0; i < r; i++) {
  156. *(sz + i) = *(tmp + i);
  157. }
  158. for(i = 0; i < r; i++) {
  159. for(j = 0; j < *(sz + i); j++) {
  160. *(*(mat + i) + j) = *(*(new + i) + j);
  161. }
  162. }
  163. free(tmp);
  164. for(i = 0; i < 2000; i++) {
  165. free(*(new + i));
  166. }
  167. free(new);
  168. }
  169. else if(strcmp(c, "DLC") == 0) {
  170. int **new = (int**)malloc(2000 * sizeof(int*));
  171. for(i = 0; i < 2000; i++) {
  172. *(new + i) = (int*)malloc(2000 * sizeof(int));
  173. }
  174. int newsz = 0, *tmp = (int*)malloc(r * sizeof(int));
  175. for(i = 0; i < r; i++) {
  176. for(j = 0; j < *(sz + i) - 1; j++) {
  177. *(*(new + i) + j) = *(*(mat + i) + j);
  178. }
  179. if(*(sz + i) > 1) {
  180. *(tmp + newsz) = *(sz + i) - 1;
  181. newsz++;
  182. }
  183. }
  184. r = newsz;
  185. for(i = 0; i < r; i++) {
  186. *(sz + i) = *(tmp + i);
  187. }
  188. for(i = 0; i < r; i++) {
  189. for(j = 0; j < *(sz + i); j++) {
  190. *(*(mat + i) + j) = *(*(new + i) + j);
  191. }
  192. }
  193. free(tmp);
  194. for(i = 0; i < 2000; i++) {
  195. free(*(new + i));
  196. }
  197. free(new);
  198. }
  199. else if(strcmp(c, "RMR") == 0) {
  200. int ind;
  201. scanf("%d", &ind);
  202. if(ind >= 0 && ind < r) {
  203. for(i = ind; i + 1 < r; i++) {
  204. *(sz + i) = *(sz + i + 1);
  205. for(j = 0; j < *(sz + i); j++) {
  206. *(*(mat + i) + j) = *(*(mat + i + 1) + j);
  207. }
  208. }
  209. r--;
  210. }
  211. }
  212. else if(strcmp(c, "RMC") == 0) {
  213. int ind;
  214. scanf("%d", &ind);
  215. int newsz = 0, *tmp = (int*)malloc(r * sizeof(int));
  216. int **new = (int**)malloc(2000 * sizeof(int*));
  217. for(i = 0; i < 2000; i++) {
  218. *(new + i) = (int*)malloc(2000 * sizeof(int));
  219. }
  220. for(i = 0; i < r; i++) {
  221. int ok = 0;
  222. for(j = 0; j < *(sz + i); j++) {
  223. if(j == ind) {
  224. ok = 1;
  225. continue;
  226. }
  227. *(*(new + i) + j) = *(*(mat + i) + j);
  228. }
  229. if(ok == 1) {
  230. if(*(sz + i) > 1) {
  231. *(tmp + newsz) = *(sz + i) - 1;
  232. newsz++;
  233. }
  234. }
  235. else {
  236. *(tmp + newsz) = *(sz + i);
  237. newsz++;
  238. }
  239.  
  240. }
  241. r = newsz;
  242. for(i = 0; i < r; i++) {
  243. *(sz + i) = *(tmp + i);
  244. }
  245. for(i = 0; i < r; i++) {
  246. for(j = 0; j < *(sz + i); j++) {
  247. *(*(mat + i) + j) = *(*(new + i) + j);
  248. }
  249. }
  250. free(tmp);
  251. for(i = 0; i < 2000; i++) {
  252. free(*(new + i));
  253. }
  254. free(new);
  255. }
  256.  
  257.  
  258.  
  259. }
  260.  
  261. free(c);
  262. free(sz);
  263. for(i = 0; i < 2000; i++) {
  264. free(*(mat + i));
  265. }
  266. free(mat);
  267.  
  268. return 0;
  269. }
  270.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement