Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Blagoja Mladenov
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int min(int a, int b) {
- if(a < b) {
- return a;
- }
- return b;
- }
- int main() {
- char *c;
- int i;
- int j;
- c = (char*) malloc(3 * sizeof(char));
- int **mat;
- mat = (int **)malloc(1000 * sizeof(int *));
- for(i = 0; i < 1000 ; i++) {
- *(mat + i) = (int*) malloc(1000 * sizeof(int));
- }
- int *sz = (int*)malloc(1000 * sizeof(int));
- for(i = 0; i < 1000; i++) {
- *(sz + i) = 0;
- }
- int r = 0;
- while(1) {
- scanf("%s", c);
- if(strcmp(c, "END") == 0) {
- break;
- }
- if(strcmp(c, "AFR") == 0) {
- int n;
- scanf("%d", &n);
- int *tmp = (int*) malloc(n * sizeof(int));
- for(i = 0; i < n; i++) {
- scanf("%d", (tmp + i));
- }
- for(i = r; i > 0; i--) {
- *(sz + i) = *(sz + i - 1);
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + i) + j) = *(*(mat + i - 1) + j);
- }
- }
- r++;
- *(sz) = n;
- for(i =0 ; i < n; i++) {
- *(*(mat) + i) = *(tmp + i);
- }
- }
- else if(strcmp(c, "ALR") == 0) {
- int n;
- scanf("%d", &n);
- for(i = 0; i < n; i++) {
- scanf("%d", (*(mat + r) + i));
- }
- *(sz + r) = n;
- r++;
- }
- else if(strcmp(c, "DFR") == 0) {
- if(r > 0) {
- for(i = 0; i < r - 1; i++) {
- *(sz + i) = *(sz + i + 1);
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + i) + j) = *(*(mat + i + 1) + j);
- }
- }
- r--;
- *(sz + r) = 0;
- }
- }
- else if(strcmp(c, "DLR") == 0) {
- if(r > 0) {
- r--;
- *(sz + r) = 0;
- }
- }
- else if(strcmp(c, "PRT") == 0) {
- printf("%d\n", r);
- for(i = 0; i < r; i++) {
- printf("%d ", *(sz + i));
- for(j = 0; j < *(sz + i); j++) {
- printf("%d ", *(*(mat + i) + j));
- }
- printf("\n");
- }
- }
- else if(strcmp(c, "AFC") == 0) {
- int n;
- scanf("%d", &n);
- int *a = (int*)malloc(n * sizeof(int));
- for(i = 0; i < n; i++) {
- scanf("%d", (a + i));
- }
- for(i = 0; i < n; i++) {
- if(*(sz + i) > 0) {
- for(j = *(sz + i); j > 0; j--) {
- *(*(mat + i) + j) = *(*(mat + i) + j - 1);
- }
- *(*(mat + i)) = *(a + i);
- *(sz + i) += 1;
- }
- else {
- *(sz + i) = 1;
- *(*(mat + i)) = *(a + i);
- r++;
- }
- }
- free(a);
- }
- else if(strcmp(c, "ALC") == 0) {
- int n;
- scanf("%d", &n);
- int *a = (int*)malloc(n * sizeof(int));
- for(i = 0; i < n; i++) {
- scanf("%d", (a + i));
- }
- for(i = 0; i < n; i++) {
- if(*(sz + i) > 0) {
- *(*(mat + i) + (*(sz + i))) = *(a + i);
- *(sz + i) += 1;
- }
- else {
- *(sz + i) = 1;
- *(*(mat + i)) = *(a + i);
- r++;
- }
- }
- free(a);
- }
- else if(strcmp(c, "DFC") == 0) {
- if(r == 0) continue;
- for(i = 0; i < r; i++) {
- *(sz + i) -= 1;
- }
- int newr = r;
- for(i = 0; i < r; i++) {
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + i) + j) = *(*(mat + i) + j + 1);
- }
- if(*(sz + i) == 0) {
- newr--;
- }
- }
- r = newr;
- }
- else if(strcmp(c, "DLC") == 0) {
- if(r == 0) continue;
- int newr = r;
- for(i = 0; i < r; i++) {
- *(sz + i) -= 1;
- if(*(sz + i) == 0) {
- newr--;
- }
- }
- r = newr;
- }
- else if(strcmp(c, "IBR") == 0) {
- int ind, n;
- scanf("%d%d", &ind, &n);
- int *a = (int*)malloc(n * sizeof(int));
- for(i = 0; i < n; i++) {
- scanf("%d", (a + i));
- }
- if(ind >= 0 && ind < r) {
- for(i = r; i > ind; i--) {
- *(sz + i) = *(sz + i - 1);
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + i) + j) = *(*(mat + i - 1) + j);
- }
- }
- *(sz + ind) = n;
- for(j = 0; j < n; j++) {
- *(*(mat + ind) + j) = *(a + j);
- }
- r++;
- }
- free(a);
- }
- else if(strcmp(c, "IAR") == 0) {
- int ind, n;
- scanf("%d%d", &ind, &n);
- int *a = (int*)malloc(n * sizeof(int));
- for(i = 0; i < n; i++) {
- scanf("%d", (a + i));
- }
- if(ind >= 0 && ind < r) {
- for(i = r; i > ind + 1; i--) {
- *(sz + i) = *(sz + i - 1);
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + i) + j) = *(*(mat + i - 1) + j);
- }
- }
- *(sz + ind + 1) = n;
- for(j = 0; j < n; j++) {
- *(*(mat + ind + 1) + j) = *(a + j);
- }
- r++;
- }
- free(a);
- }
- else if(strcmp(c, "RMR") == 0) {
- int ind;
- scanf("%d", &ind);
- if(ind >= 0 && ind < r) {
- for(i = ind; i < r - 1; i++) {
- *(sz + i) = *(sz + i + 1);
- for(j = 0; j < *(sz + i); j++) {
- *(*(mat + i) + j) = *(*(mat + i + 1) + j);
- }
- }
- *(sz + r - 1) = 0;
- r--;
- }
- }
- else if(strcmp(c, "RMC") == 0) {
- int ind;
- scanf("%d", &ind);
- int newr = r;
- for(i = 0; i < r; i++) {
- if(ind >= 0 && ind < (*(sz + i))) {
- for(j = ind; j + 1 < *(sz + i); j++) {
- *(*(mat + i) + j) = *(*(mat + i) + j + 1);
- }
- *(sz + i) -= 1;
- if(*(sz + i) == 0) {
- newr--;
- }
- }
- }
- r = newr;
- }
- else if(strcmp(c, "SWR") == 0) {
- int ind1, ind2;
- scanf("%d%d", &ind1, &ind2);
- if(ind1 >= 0 && ind2 >= 0 && ind1 < r && ind2 < r) {
- if(*(sz + ind1) == *(sz + ind2)) {
- for(i = 0; i < *(sz + ind1); i++) {
- int tmp1 = *(*(mat + ind1) + i);
- int tmp2 = *(*(mat + ind2) + i);
- *(*(mat + ind1) + i) = tmp2;
- *(*(mat + ind2) + i) = tmp1;
- }
- }
- }
- }
- else if(strcmp(c, "SWC") == 0) {
- int ind1, ind2;
- scanf("%d%d", &ind1, &ind2);
- }
- }
- free(c);
- free(sz);
- for(i = 0; i < 1000; i++) {
- free(*(mat + i));
- }
- free(mat);
- return 0;
- }
- /*
- AFR 3 1 2 3
- AFR 4 1 2 3 4
- IAR 0 5 1 2 3 4 5
- IBR 1 6 1 2 3 4 5 6
- **/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement