Advertisement
josiftepe

Untitled

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