Advertisement
josiftepe

Untitled

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