Advertisement
josiftepe

Untitled

Apr 20th, 2021
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.51 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 *tmp = (int*)malloc(n * sizeof(int));
  131. for(i = 0; i < n; i++) {
  132. scanf("%d", (tmp + i));
  133. }
  134. int **new = (int**)malloc(2000 * sizeof(int*));
  135. for(i = 0; i < 2000; i++) {
  136. *(new + i) = (int*)malloc(2000 * sizeof(int));
  137. }
  138. int newsz = 0, *sztmp = (int*)malloc(r + n * sizeof(int));
  139. if(r < n) {
  140. for(i = 0; i < n - r; i++) {
  141. *(sztmp + newsz) = 1;
  142. *(*(new + newsz)) = *(tmp + newsz);
  143. newsz++;
  144.  
  145. }
  146. }
  147. for(i = 0; i < r; i++) {
  148. *(*(new + newsz)) = *(tmp + newsz);
  149. for(j = 0; j < *(sz + i); j++) {
  150. *(*(new + newsz) + j + 1) = *(*(mat + i) + j);
  151. }
  152. *(sztmp + newsz) = *(sz + i) + 1;
  153. newsz++;
  154. }
  155. r = newsz;
  156. for(i = 0; i < r; i++){
  157. *(sz + i) = *(sztmp + i);
  158. for(j = 0; j < *(sz + i); j++) {
  159. *(*(mat + i) + j) = *(*(new + i) + j);
  160. }
  161. }
  162. free(tmp);
  163. free(sztmp);
  164. for(i = 0; i < 2000; i++) {
  165. free(*(new + i));
  166. }
  167. free(new); }
  168. else if(strcmp(c, "DFC") == 0) {
  169. if(r == 0) continue;
  170.  
  171. int **new = (int**)malloc(2000 * sizeof(int*));
  172. for(i = 0; i < 2000; i++) {
  173. *(new + i) = (int*)malloc(2000 * sizeof(int));
  174. }
  175. int newsz = 0, *tmp = (int*)malloc(r * sizeof(int));
  176. for(i = 0; i < r; i++) {
  177. *(sz + i) -= 1;
  178. }
  179. for(i = 0; i < r; i++) {
  180. if(*(sz + i) == 0) continue;
  181. for(j = 1; j <= *(sz + i); j++) {
  182. *(*(new + newsz) + (j - 1)) = *(*(mat + i) + j);
  183. }
  184. *(tmp + newsz) = *(sz + i);
  185. newsz++;
  186. }
  187. r = newsz;
  188. for(i = 0; i < r; i++) {
  189. *(sz + i) = *(tmp + i);
  190. for(j = 0; j < *(sz + i); j++) {
  191. *(*(mat + i) + j) = *(*(new + i) + j);
  192. }
  193. }
  194. free(tmp);
  195. for(i = 0; i < 2000; i++) {
  196. free(*(new + i));
  197. }
  198. free(new);
  199. }
  200. else if(strcmp(c, "DLC") == 0) {
  201. if(r == 0) continue;
  202. int **new = (int**)malloc(2000 * sizeof(int*));
  203. for(i = 0; i < 2000; i++) {
  204. *(new + i) = (int*)malloc(2000 * sizeof(int));
  205. }
  206. int newsz = 0, *tmp = (int*)malloc(r * sizeof(int));
  207. for(i = 0; i < r; i++) {
  208. for(j = 0; j < *(sz + i) - 1; j++) {
  209. *(*(new + i) + j) = *(*(mat + i) + j);
  210. }
  211. if(*(sz + i) > 1) {
  212. *(tmp + newsz) = *(sz + i) - 1;
  213. newsz++;
  214. }
  215. }
  216. r = newsz;
  217. for(i = 0; i < r; i++) {
  218. *(sz + i) = *(tmp + i);
  219. }
  220. for(i = 0; i < r; i++) {
  221. for(j = 0; j < *(sz + i); j++) {
  222. *(*(mat + i) + j) = *(*(new + i) + j);
  223. }
  224. }
  225. free(tmp);
  226. for(i = 0; i < 2000; i++) {
  227. free(*(new + i));
  228. }
  229. free(new);
  230. }
  231. else if(strcmp(c, "RMR") == 0) {
  232. int ind;
  233. scanf("%d", &ind);
  234. if(r == 0) continue;
  235.  
  236. if(ind >= 0 && ind < r) {
  237. for(i = ind; i + 1 < r; i++) {
  238. *(sz + i) = *(sz + i + 1);
  239. for(j = 0; j < *(sz + i); j++) {
  240. *(*(mat + i) + j) = *(*(mat + i + 1) + j);
  241. }
  242. }
  243. r--;
  244. }
  245. }
  246. else if(strcmp(c, "RMC") == 0) {
  247. int ind;
  248. scanf("%d", &ind);
  249. if(r == 0) continue;
  250.  
  251. int newsz = 0, *tmp = (int*)malloc(r * sizeof(int));
  252. int **new = (int**)malloc(2000 * sizeof(int*));
  253. for(i = 0; i < 2000; i++) {
  254. *(new + i) = (int*)malloc(2000 * sizeof(int));
  255. }
  256. for(i = 0; i < r; i++) {
  257. int ok = 0;
  258. if(*(sz + i) == 1) continue;
  259.  
  260. for(j = 0; j < *(sz + i); j++) {
  261. if(j == ind) {
  262. ok = 1;
  263. continue;
  264. }
  265. *(*(new + newsz) + j) = *(*(mat + i) + j);
  266. }
  267. if(ok == 1) {
  268. if(*(sz + i) > 1) {
  269. *(tmp + newsz) = *(sz + i) - 1;
  270. newsz++;
  271. }
  272. }
  273. else {
  274. *(tmp + newsz) = *(sz + i);
  275. newsz++;
  276. }
  277.  
  278. }
  279. r = newsz;
  280. for(i = 0; i < r; i++) {
  281. *(sz + i) = *(tmp + i);
  282. }
  283. for(i = 0; i < r; i++) {
  284. for(j = 0; j < *(sz + i); j++) {
  285. *(*(mat + i) + j) = *(*(new + i) + j);
  286. }
  287. }
  288. free(tmp);
  289. for(i = 0; i < 2000; i++) {
  290. free(*(new + i));
  291. }
  292. free(new);
  293. }
  294.  
  295.  
  296.  
  297. }
  298.  
  299. free(c);
  300. free(sz);
  301. for(i = 0; i < 2000; i++) {
  302. free(*(mat + i));
  303. }
  304. free(mat);
  305.  
  306. return 0;
  307. }
  308. /*
  309. AFC 3 1 2 3
  310. PRT
  311. AFC 5 1 2 3 4 5
  312. **/
  313.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement