Advertisement
josiftepe

Untitled

Apr 21st, 2021
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.16 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.  
  13.  
  14. int main() {
  15.  
  16. char *c;
  17. int i;
  18. int j;
  19. c = (char*) malloc(3 * sizeof(char));
  20. int **mat;
  21. mat = (int **)malloc(1000 * sizeof(int *));
  22. for(i = 0; i < 1000 ; i++) {
  23. *(mat + i) = (int*) malloc(1000 * sizeof(int));
  24. }
  25. int *sz = (int*)malloc(1000 * sizeof(int));
  26. for(i = 0; i < 1000; i++) {
  27. *(sz + i) = 0;
  28. }
  29. int r = 0;
  30. while(1) {
  31. scanf("%s", c);
  32. if(strcmp(c, "END") == 0) {
  33. break;
  34. }
  35. if(strcmp(c, "AFR") == 0) {
  36. int n;
  37. scanf("%d", &n);
  38. int *tmp = (int*) malloc(n * sizeof(int));
  39. for(i = 0; i < n; i++) {
  40. scanf("%d", (tmp + i));
  41. }
  42. for(i = r; i > 0; i--) {
  43. *(sz + i) = *(sz + i - 1);
  44. for(j = 0; j < *(sz + i); j++) {
  45. *(*(mat + i) + j) = *(*(mat + i - 1) + j);
  46. }
  47. }
  48. r++;
  49. *(sz) = n;
  50. for(i =0 ; i < n; i++) {
  51. *(*(mat) + i) = *(tmp + i);
  52. }
  53. }
  54. else if(strcmp(c, "ALR") == 0) {
  55. int n;
  56. scanf("%d", &n);
  57. for(i = 0; i < n; i++) {
  58. scanf("%d", (*(mat + r) + i));
  59. }
  60. *(sz + r) = n;
  61. r++;
  62.  
  63. }
  64. else if(strcmp(c, "DFR") == 0) {
  65. if(r > 0) {
  66. for(i = 0; i < r - 1; i++) {
  67. *(sz + i) = *(sz + i + 1);
  68. for(j = 0; j < *(sz + i); j++) {
  69. *(*(mat + i) + j) = *(*(mat + i + 1) + j);
  70. }
  71. }
  72. r--;
  73. *(sz + r) = 0;
  74. }
  75. }
  76. else if(strcmp(c, "DLR") == 0) {
  77. if(r > 0) {
  78. r--;
  79. *(sz + r) = 0;
  80. }
  81. }
  82. else if(strcmp(c, "PRT") == 0) {
  83. printf("%d\n", r);
  84. for(i = 0; i < r; i++) {
  85. printf("%d ", *(sz + i));
  86. for(j = 0; j < *(sz + i); j++) {
  87. printf("%d ", *(*(mat + i) + j));
  88. }
  89. printf("\n");
  90. }
  91. }
  92. else if(strcmp(c, "AFC") == 0) {
  93. int n;
  94. scanf("%d", &n);
  95. int *a = (int*)malloc(n * sizeof(int));
  96. for(i = 0; i < n; i++) {
  97. scanf("%d", (a + i));
  98. }
  99. for(i = 0; i < n; i++) {
  100. if(*(sz + i) > 0) {
  101. for(j = *(sz + i); j > 0; j--) {
  102. *(*(mat + i) + j) = *(*(mat + i) + j - 1);
  103. }
  104. *(*(mat + i)) = *(a + i);
  105. *(sz + i) += 1;
  106. }
  107. else {
  108. *(sz + i) = 1;
  109. *(*(mat + i)) = *(a + i);
  110. r++;
  111. }
  112. }
  113. free(a);
  114. }
  115. else if(strcmp(c, "ALC") == 0) {
  116. int n;
  117. scanf("%d", &n);
  118. int *a = (int*)malloc(n * sizeof(int));
  119. for(i = 0; i < n; i++) {
  120. scanf("%d", (a + i));
  121. }
  122. for(i = 0; i < n; i++) {
  123. if(*(sz + i) > 0) {
  124. *(*(mat + i) + (*(sz + i))) = *(a + i);
  125. *(sz + i) += 1;
  126. }
  127. else {
  128. *(sz + i) = 1;
  129. *(*(mat + i)) = *(a + i);
  130. r++;
  131. }
  132. }
  133. free(a);
  134. }
  135. else if(strcmp(c, "DFC") == 0) {
  136. if(r == 0) continue;
  137. for(i = 0; i < r; i++) {
  138. *(sz + i) -= 1;
  139. }
  140. for(i = 0; i < r; i++) {
  141. for(j = 0; j < *(sz + i); j++) {
  142. *(*(mat + i) + j) = *(*(mat + i) + j + 1);
  143. }
  144. }
  145. int at = 0;
  146. for(i = 0; i < r; i++) {
  147. if(*(sz + i) > 0) {
  148. for(j = 0; j < *(sz + i); j++) {
  149. *(*(mat + at) + j) = *(*(mat + i) + j);
  150. }
  151. *(sz + at) = *(sz + i);
  152. at++;
  153. }
  154. }
  155. r = at;
  156. }
  157. else if(strcmp(c, "DLC") == 0) {
  158. if(r == 0) continue;
  159. for(i = 0; i < r; i++) {
  160. *(sz + i) -= 1;
  161. }
  162. int at = 0;
  163. for(i = 0; i < r; i++) {
  164. if(*(sz + i) > 0) {
  165. for(j = 0; j < *(sz + i); j++) {
  166. *(*(mat + at) + j) = *(*(mat + i) + j);
  167. }
  168. *(sz + at) = *(sz + i);
  169. at++;
  170. }
  171. }
  172. r = at;
  173. }
  174. else if(strcmp(c, "IBR") == 0) {
  175. int ind, n;
  176. scanf("%d%d", &ind, &n);
  177. int *a = (int*)malloc(n * sizeof(int));
  178. for(i = 0; i < n; i++) {
  179. scanf("%d", (a + i));
  180. }
  181. if(ind >= 0 && ind < r) {
  182. for(i = r; i > ind; i--) {
  183. *(sz + i) = *(sz + i - 1);
  184. for(j = 0; j < *(sz + i); j++) {
  185. *(*(mat + i) + j) = *(*(mat + i - 1) + j);
  186. }
  187. }
  188. *(sz + ind) = n;
  189. for(j = 0; j < n; j++) {
  190. *(*(mat + ind) + j) = *(a + j);
  191. }
  192. r++;
  193. }
  194. free(a);
  195. }
  196. else if(strcmp(c, "IAR") == 0) {
  197. int ind, n;
  198. scanf("%d%d", &ind, &n);
  199. int *a = (int*)malloc(n * sizeof(int));
  200. for(i = 0; i < n; i++) {
  201. scanf("%d", (a + i));
  202. }
  203. if(ind >= 0 && ind < r) {
  204. for(i = r; i > ind + 1; i--) {
  205. *(sz + i) = *(sz + i - 1);
  206. for(j = 0; j < *(sz + i); j++) {
  207. *(*(mat + i) + j) = *(*(mat + i - 1) + j);
  208. }
  209. }
  210. *(sz + ind + 1) = n;
  211. for(j = 0; j < n; j++) {
  212. *(*(mat + ind + 1) + j) = *(a + j);
  213. }
  214. r++;
  215. }
  216. free(a);
  217. }
  218. else if(strcmp(c, "RMR") == 0) {
  219. int ind;
  220. scanf("%d", &ind);
  221. if(ind >= 0 && ind < r) {
  222. for(i = ind; i < r - 1; i++) {
  223. *(sz + i) = *(sz + i + 1);
  224. for(j = 0; j < *(sz + i); j++) {
  225. *(*(mat + i) + j) = *(*(mat + i + 1) + j);
  226. }
  227. }
  228. *(sz + r - 1) = 0;
  229. r--;
  230. }
  231. }
  232. else if(strcmp(c, "RMC") == 0) {
  233. int ind;
  234. scanf("%d", &ind);
  235. for(i = 0; i < r; i++) {
  236. if(ind >= 0 && ind < (*(sz + i))) {
  237. for(j = ind; j + 1 < *(sz + i); j++) {
  238. *(*(mat + i) + j) = *(*(mat + i) + j + 1);
  239. }
  240. *(sz + i) -= 1;
  241.  
  242. }
  243. }
  244.  
  245. int at = 0;
  246. for(i = 0; i < r; i++) {
  247. if(*(sz + i) > 0) {
  248. for(j = 0; j < *(sz + i); j++) {
  249. *(*(mat + at) + j) = *(*(mat + i) + j);
  250. }
  251. *(sz + at) = *(sz + i);
  252. at++;
  253. }
  254. }
  255. r = at;
  256.  
  257. }
  258. else if(strcmp(c, "SWR") == 0) {
  259. int ind1, ind2;
  260. scanf("%d%d", &ind1, &ind2);
  261. if(ind1 >= 0 && ind2 >= 0 && ind1 < r && ind2 < r) {
  262. int *a1 = (int*) malloc(*(sz + ind1) * sizeof(int));
  263. int *a2 = (int*)malloc(*(sz + ind2) * sizeof(int));
  264. for(i = 0; i < *(sz + ind1); i++) {
  265. *(a1 + i) = *(*(mat + ind1) + i);
  266. }
  267. for(i = 0; i < *(sz + ind2); i++) {
  268. *(a2 + i) = *(*(mat + ind2) + i);
  269. }
  270. int sz1 = *(sz + ind1);
  271. int sz2 = *(sz + ind2);
  272. *(sz + ind1) = sz2;
  273. *(sz + ind2) = sz1;
  274. for(i = 0; i < *(sz + ind1); i++) {
  275. *(*(mat + ind1) + i) = *(a2 + i);
  276. }
  277. for(i = 0; i < *(sz + ind2); i++) {
  278. *(*(mat + ind2) + i) = *(a1 + i);
  279. }
  280. free(a1);
  281. free(a2);
  282. }
  283. }
  284. else if(strcmp(c, "SWC") == 0) {
  285. int ind1, ind2;
  286. scanf("%d%d", &ind1, &ind2);
  287. for(i = 0; i < r; i++) {
  288. int val1 = -1, val2 = -1;
  289.  
  290. for(j = 0; j < *(sz + i); j++) {
  291. if(ind1 == j) {
  292. val1 = *(*(mat + i) + j);
  293. }
  294. if(ind2 == j) {
  295. val2 = *(*(mat + i) + j);
  296. }
  297. }
  298. if(val1 != -1 && val2 != -1) {
  299. *(*(mat + i) + ind1) = val2;
  300. *(*(mat + i) + ind2) = val1;
  301. }
  302.  
  303. }
  304.  
  305. }
  306. else if(strcmp(c, "RMB") == 0) {
  307. int i1, j1;
  308. int s1, s2;
  309. scanf("%d%d%d%d", &i1, &s1, &j1, &s2);
  310. int *a = (int*)malloc(1000 * sizeof(int));
  311. for(i = i1; i < i1 + s1; i++) {
  312. int at = 0;
  313. for(j = 0; j < *(sz + i); j++) {
  314. if(j < j1 || j >= j1 + s2) {
  315. *(a + at) = *(*(mat + i) + j);
  316. at++;
  317. }
  318. }
  319. *(sz + i) = at;
  320. for(j = 0; j < *(sz + i); j++) {
  321. *(*(mat + i) + j) = *(a + j);
  322. }
  323. }
  324. int at = 0;
  325. for(i = 0; i < r; i++) {
  326. if(*(sz + i) > 0) {
  327. for(j = 0; j < *(sz + i); j++) {
  328. *(*(mat + at) + j) = *(*(mat + i) + j);
  329. }
  330. *(sz + at) = *(sz + i);
  331. at++;
  332. }
  333. }
  334. r = at;
  335. free(a);
  336.  
  337. }
  338. else if(strcmp(c, "IBC") == 0) {
  339. int ind, n;
  340. scanf("%d%d", &ind, &n);
  341. int *a = (int*)malloc(n * sizeof(int));
  342. for(i = 0; i < n; i++) {
  343. scanf("%d", (a + i));
  344. }
  345. for(i = 0; i < n; i++) {
  346. if(*(sz + i) > 0) {
  347. if(ind < *(sz + i)) {
  348. for(j = *(sz + i); j > ind; j--) {
  349. *(*(mat + i) + j) = *(*(mat + i) + j - 1);
  350. }
  351. *(*(mat + i) + ind)= *(a + i);
  352. *(sz + i) += 1;
  353. }
  354. else {
  355. *(*(mat + i) + (*(sz + i))) = *(a + i);
  356. *(sz + i) += 1;
  357. }
  358. }
  359. else {
  360. *(sz + i) = 1;
  361. *(*(mat + i)) = *(a + i);
  362. r++;
  363. }
  364. }
  365. free(a);
  366. }
  367. else if(strcmp(c, "IAC") == 0) {
  368. int ind, n;
  369. scanf("%d%d", &ind, &n);
  370. int *a = (int*)malloc(n * sizeof(int));
  371. for(i = 0; i < n; i++) {
  372. scanf("%d", (a + i));
  373. }
  374. for(i = 0; i < n; i++) {
  375. if(*(sz + i) > 0) {
  376. if(ind < *(sz + i)) {
  377. for(j = *(sz + i); j > ind + 1; j--) {
  378. *(*(mat + i) + j) = *(*(mat + i) + j - 1);
  379. }
  380. *(*(mat + i) + ind + 1)= *(a + i);
  381. *(sz + i) += 1;
  382. }
  383. else {
  384. *(*(mat + i) + (*(sz + i))) = *(a + i);
  385. *(sz + i) += 1;
  386. }
  387. }
  388. else {
  389. *(sz + i) = 1;
  390. *(*(mat + i)) = *(a + i);
  391. r++;
  392. }
  393. }
  394. free(a);
  395. }
  396. else if(strcmp(c, "ISB") == 0) {
  397. int i1, j1;
  398. scanf("%d%d", &i1, &j1);
  399. int n, m;
  400. scanf("%d%d", &n, &m);
  401. int **a = (int**) malloc((n + 1) * sizeof(int*));
  402. for(i = 0; i < n; i++) {
  403. *(a + i) = (int*)malloc((m + 1) * sizeof(int));
  404. }
  405.  
  406. for(i = 0; i < n; i++) {
  407. for(j = 0; j < m; j++) {
  408. scanf("%d", (*(a + i) + j));
  409. }
  410. }
  411. int x = 0;
  412. int q = r;
  413. if(r >= i1) {
  414. q = i1;
  415. }
  416. for(i = i1; i < i1 + n; i++) {
  417. if(*(sz + i) == 0) {
  418. for(j = 0; j < m; j++) {
  419. *(*(mat + q) + j) = *(*(a + x) + j);
  420. }
  421. *(sz + q) = m;
  422. r++;
  423. }
  424. else if(*(sz + q) <= j1) {
  425. for(j = 0; j < m; j++) {
  426. *(*(mat + q) + (*(sz + q))) = *(*(a + x) + j);
  427. *(sz + q) += 1;
  428. }
  429. }
  430. else {
  431. int newsz = 0;
  432. int *tmp = (int*)malloc(1500 * sizeof(int));
  433. for(j = j1; j < *(sz + q); j++) {
  434. *(tmp + newsz) = *(*(mat + q) + j);
  435. newsz++;
  436. }
  437. *(sz + q) += m;
  438. newsz = 0;
  439. for(j = j1 + m; j < *(sz + q); j++) {
  440. *(*(mat + q) + j) = *(tmp + newsz);
  441. newsz++;
  442. }
  443. free(tmp);
  444. for(j = j1; j < j1 + m; j++) {
  445. *(*(mat + q) + j) = *(*(a + x) + j - j1);
  446. }
  447. }
  448. x++;
  449. q++;
  450. }
  451. int at = 0;
  452. for(i = 0; i < 1000; i++) {
  453. if(*(sz + i) > 0) {
  454. for(j = 0; j < *(sz + i); j++) {
  455. *(*(mat + at) + j) = *(*(mat + i) + j);
  456. }
  457. *(sz + at) = *(sz + i);
  458. at++;
  459. }
  460. }
  461. r = at;
  462.  
  463.  
  464. for(i = 0; i < n; i++) {
  465. free(*(a + i));
  466. }
  467. free(a);
  468. }
  469. else if(strcmp(c, "WRF") == 0) {
  470. char *f = (char*)malloc(300 * sizeof(char));
  471. scanf("%s", f);
  472. FILE *file = fopen(f, "wb");
  473. char *str = (char*)malloc(1000 * sizeof(char));
  474. int at = 0;
  475. int rr = r;
  476. while(rr > 0) {
  477. *(str + at) = (rr % 10) + '0';
  478. rr /= 10;
  479. at++;
  480. }
  481. for(i = at - 1; i >= 0; i--) {
  482. fprintf(file, "%c", *(str + i));
  483. }
  484. fprintf(file, "\n");
  485. for(i = 0; i < r; i++) {
  486. unsigned int pp = *(sz + i);
  487. fprintf(file, "%c", ((pp >> 8) & 256));
  488. fprintf(file, "%c ", ((pp & 256)));
  489. for(j = 0; j < *(sz + i); j++) {
  490. int bb = *(*(mat + i) + j);
  491. fprintf(file, "%c ", ((bb >> 24) & 256));
  492. fprintf(file, "%c ", ((bb >> 16) & 256));
  493. fprintf(file, "%c ", ((bb >> 8) & 256));
  494. fprintf(file, "%c ", ((bb) & 256));
  495. }
  496. fprintf(file, "\n");
  497.  
  498. }
  499.  
  500.  
  501. free(f);
  502. free(str);
  503. fclose(file);
  504. }
  505. else if(strcmp(c, "RDF") == 0) {
  506. char *f = (char*)malloc(300 * sizeof(char));
  507. scanf("%s", f);
  508. FILE *file = fopen(f, "rb");
  509. mat = (int **)malloc(1000 * sizeof(int *));
  510. for(i = 0; i < 1000 ; i++) {
  511. *(mat + i) = (int*) malloc(1000 * sizeof(int));
  512. *(sz + i) = 0;
  513. }
  514. r = 0;
  515. char t;
  516. while(1) {
  517. t = getc(file);
  518. if(t < '0' || t > '9') break;
  519. r = (r * 10) + (t - '0');
  520. }
  521. for(i =0 ; i < r; i++) {
  522. t = fgetc(file);
  523. int ff = (int) t;
  524. *(sz + i) = ((ff >> 8) );
  525. t = fgetc(file);
  526. ff = (int)t;
  527.  
  528. *(sz + i) |= (ff );
  529.  
  530. for(j = 0; j < *(sz + i); j++) {
  531. t = fgetc(file);
  532. ff = (int) t;
  533. *(*(mat + i) + j) = 0;
  534. *(*(mat + i) + j) = ((ff >> 24 ));
  535. t = fgetc(file);
  536. ff = (int) t;
  537. *(*(mat + i) + j) |= ((ff >> 16));
  538. t = fgetc(file);
  539. ff = (int) t;
  540. *(*(mat + i) + j) |= ((ff >> 8));
  541. t = fgetc(file);
  542. ff = (int) t;
  543. *(*(mat + i) + j) |= ((ff));
  544.  
  545. }
  546. }
  547.  
  548. free(f);
  549. fclose(file);
  550. // free(f);
  551. }
  552.  
  553.  
  554. }
  555.  
  556. free(c);
  557. free(sz);
  558. for(i = 0; i < 1000; i++) {
  559. free(*(mat + i));
  560. }
  561. free(mat);
  562.  
  563. return 0;
  564. }
  565. /*
  566. ALR 1 1
  567. ALR 1 1
  568. ALR 1 1
  569. ALR 1 1
  570. ALR 1 1
  571. ALR 1 1
  572. ALR 1 1
  573. ALR 1 1
  574. ALR 1 1
  575. ALR 1 1
  576.  
  577. */
  578.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement